1.对于指针变量,一个非常中的操作就是要判断其有效性,即是否为空指针。
如利用动态内存申请运算符申请内存后,需要首先对内存是否申请成功进行判断。
2. static 再C语言中声明函数时,该static 函数只具有文件作用域。及该函数的作用域被限制再声明它的模块内。
3.变量类型的自动转换:
当一个操作符对两个不同类型的变量进行操作时,低类型变量会自动转换为高类型变量。当两个变量仅存在有无符号的差别时,有符号变量自动转换为无符号变量。
以上代码的执行结果为>6,因为有符号数-20自动转换为了一个非常大的无符号数。
4.宏定义尽量少使用,因为你不知道会在什么地方犯错。
在上面的这段代码中,DPS T1,T2;本意为定义两个整形指针,可是由于红定义的局限性(暂且这么说吧),实际上是定义了一个整形指针和一个整形变量。
而typedef 则不具有这个问题。
5. 下面的这段代码测试的是什么问题呢,惯性思维还是懒得思考?
输出结果为nothing 。
6.关于空指针
C语言中,每种 指针类型都对应这一个空指针,不同类型的指针对应的空指针的内部表达可能是不想同的。(空指针的内部值不一定是0,不同类型的CPU 对应着不同的空指针内部值,同一个类型的CPU不同的指针类型对应空指针内部值也可能不想同,别忘了C语言广泛应用于嵌入式系统)。
C语言中,我们使用0和NULL表示空指针。实际上再编译时编译器将NULL替换为0,再将0转换为该类型CPU对应的空指针内部值。
7.函数指针
上述代码执行后,我们可以发现*fp与fp的值是相等的,这与其他类型的指针变量是不同的。(函数编译后是什么样的指令形式?)
这也导致了利用函数指针调用函数时具有一下两种不同的形式:
两者的结果是一样的。虽然前者看起来更符合指针的定义,但是ANSI C也接受后者这种形式。
8.函数fun的声明可以位于另一个函数的体内。但是不可以在其体内进行定义。
并且函数fun 可以在其声明的函数体以外的地方调用。
阅读(118) | 评论(0) | 转发(0) |
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
如利用动态内存申请运算符申请内存后,需要首先对内存是否申请成功进行判断。
2. static 再C语言中声明函数时,该static 函数只具有文件作用域。及该函数的作用域被限制再声明它的模块内。
3.变量类型的自动转换:
当一个操作符对两个不同类型的变量进行操作时,低类型变量会自动转换为高类型变量。当两个变量仅存在有无符号的差别时,有符号变量自动转换为无符号变量。
- void foo(void)
- { unsigned int a = 6;
- int b = -20;
- (a+b > 6)?puts("> 6") : puts("<= 6");
- }
4.宏定义尽量少使用,因为你不知道会在什么地方犯错。
- #define DPS int *
- typedef int * GPS;
-
- DPS T1,T2;
- GPS T3,T4;
而typedef 则不具有这个问题。
5. 下面的这段代码测试的是什么问题呢,惯性思维还是懒得思考?
- #include <stdio.h>
- #include <string.h>
-
- int main(int argc,char *argv[])
- {
- char *p1="name",*p2;
- p2=(char *)malloc(20);
- memset(p2,0,20);
- while(*p2++=*p1++);
- printf("%s\n",p2);
- return 0;
- }
6.关于空指针
C语言中,每种 指针类型都对应这一个空指针,不同类型的指针对应的空指针的内部表达可能是不想同的。(空指针的内部值不一定是0,不同类型的CPU 对应着不同的空指针内部值,同一个类型的CPU不同的指针类型对应空指针内部值也可能不想同,别忘了C语言广泛应用于嵌入式系统)。
C语言中,我们使用0和NULL表示空指针。实际上再编译时编译器将NULL替换为0,再将0转换为该类型CPU对应的空指针内部值。
7.函数指针
- void fun(void);
- void (*fp)()=fun;
-
- cout<<*fp<<fp<<endl;
这也导致了利用函数指针调用函数时具有一下两种不同的形式:
- (*fp)();
- fp();
8.函数fun的声明可以位于另一个函数的体内。但是不可以在其体内进行定义。
并且函数fun 可以在其声明的函数体以外的地方调用。
相关热门文章
给主人留下些什么吧!~~
评论热议