C语言
yishizuofei
You got a dream,you gotla protect it. People can't do something tbemselves, they wanna tell you you can't do it. If you want something, go get it. Period 如果你有梦想的话,就要去捍卫它。当别人做不到的时候,他们就想要告诉你,你也不能。如果你想要些什么,就得去努力争取。就这样!
展开
-
C语言宏#define中#,##,#@和\的用法
一、(#)字符串化操作符作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。如:#define example( instr ) printf( "the input string is:\t%s\n", #instr )#define example1( instr ) #instr当使用该宏定义...原创 2018-07-12 21:46:20 · 15101 阅读 · 1 评论 -
(*(void(*) ())0)();------这是什么?
(*(void(*)())0)();请问这条语句是什么?有什么作用?当上一次面试官把这到题抛给我时,很遗憾,没能将这道题的完整答案讲给面试官。其实这个问题在《C陷阱和缺陷》和《C语言深度剖析》这两本书都有过阐述。因此,我重新去看了一遍,现在就将完整的过程写下来,一个是帮助我理解和记忆,另一个也是把答案共享给遇到相同问题的你们。下面就来进行分析:第一步:void(*)(),可以明白这是一个函数指针类型原创 2017-10-26 11:03:17 · 6591 阅读 · 0 评论 -
typedef和#define的区别
typedef的用法typedef的意思是给一个已经存在的数据类型(注意:是类型不是变量)取一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类型的别名。typedef不是定义一个新的数据类型。 typedef的主要用途有: 1、定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; 这多数不原创 2017-10-15 19:21:02 · 510 阅读 · 0 评论 -
printf函数结合自增自减运算的使用
源程序int main(){ int i = 0; printf("%d,%d,%d\n",i++,--i,i++); return 0;}按照我们平时对自增自减运算符表达式的理解,我们预期的结果应该是:0,0,0但实际结果却是:0,1,0原因是我们在调用标准库函数printf之前,对所传入的参数进行了遍历,将计算之后的结果保存在寄存器中,并当做实参压入栈中,由于CPU中原创 2017-10-23 14:45:17 · 4359 阅读 · 0 评论 -
extern关键字的使用
概念extern是外面的、外来的意思。extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,下面的代码用到的这些变量或函数是外来的,不是本文件定义的,提示编译器遇到此变量和函数在其他模块中寻找其定义。代码举例a.cppint arr[] = {0,1,2,3,4,5,6,7,8,9};b.cppint main10(){ extern int *arr; pri原创 2017-10-23 19:39:04 · 3143 阅读 · 0 评论 -
字符串函数strspn、strcspn和strpbrk
strspn函数头文件:#include <string.h> 函数原型:size_t strspn( const char *str, const char *strCharSet ); 参数:str、strCharSet 为要进行查找的两个字符串。 返回值:返回字符串 str 开头连续包含字符串 strCharSet内的字符数目。所以,如果 str 所包含的字符都属于strCharSet,原创 2017-10-14 12:44:19 · 1702 阅读 · 1 评论 -
字符串切割函数strtok、strtok_s、strtok_r的区别
strtok函数头文件:#include <string.h> 函数原型:char * strtok (char *str, const char * delimiters); 参数:str:待分割的字符串(c-string);delimiters:分割符字符串。 该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当str原创 2017-10-14 11:19:56 · 18670 阅读 · 3 评论 -
C语言中sprintf()函数的用法
sprintf函数的用法1、该函数包含在stdio.h的头文件中。 2、sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出),而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。 3、sprintf函数的格式: int sprintf(原创 2017-10-10 17:33:26 · 217283 阅读 · 12 评论 -
内存拷贝函数memmove(支持内存重叠拷贝)的实现
主要考虑的情况如下:1、拷贝的数据是任意类型数据,所以指针用void * 接收。2、src源数据一般是只读的,在函数内部对其修改是非法的。3、返回值类型是void *,主要用来实现链式表达式,就像赋值表达式一样。4、判断指针是否为NULL时用assert而不是用if条件语句,因为每次调用函数都会进行一次判断,性能损失较大。 因此我们可以利用宏的开关作用。如果在调试时我们加入“#d...原创 2018-08-14 09:12:58 · 2242 阅读 · 0 评论