c编程中需注意的问题

1.对于指针变量,一个非常中的操作就是要判断其有效性,即是否为空指针。
如利用动态内存申请运算符申请内存后,需要首先对内存是否申请成功进行判断。
2. static 再C语言中声明函数时,该static 函数只具有文件作用域。及该函数的作用域被限制再声明它的模块内。
3.变量类型的自动转换:
当一个操作符对两个不同类型的变量进行操作时,低类型变量会自动转换为高类型变量。当两个变量仅存在有无符号的差别时,有符号变量自动转换为无符号变量。
  1. void foo(void)
  2. { unsigned int a = 6;
  3. int b = -20;
  4. (a+b > 6)?puts("> 6") : puts("<= 6");
  5. }
以上代码的执行结果为>6,因为有符号数-20自动转换为了一个非常大的无符号数。
4.宏定义尽量少使用,因为你不知道会在什么地方犯错。
  1. #define DPS int *
  2. typedef int * GPS;

  3. DPS T1,T2;
  4. GPS T3,T4;
在上面的这段代码中,DPS T1,T2;本意为定义两个整形指针,可是由于红定义的局限性(暂且这么说吧),实际上是定义了一个整形指针和一个整形变量。
而typedef 则不具有这个问题。
5. 下面的这段代码测试的是什么问题呢,惯性思维还是懒得思考?
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc,char *argv[])
  4. {
  5.         char *p1="name",*p2;
  6.         p2=(char *)malloc(20);
  7.         memset(p2,0,20);
  8.         while(*p2++=*p1++);
  9.         printf("%s\n",p2);
  10.         return 0;
  11. }
输出结果为nothing 。
6.关于空指针
C语言中,每种 指针类型都对应这一个空指针,不同类型的指针对应的空指针的内部表达可能是不想同的。(空指针的内部值不一定是0,不同类型的CPU 对应着不同的空指针内部值,同一个类型的CPU不同的指针类型对应空指针内部值也可能不想同,别忘了C语言广泛应用于嵌入式系统)。
C语言中,我们使用0和NULL表示空指针。实际上再编译时编译器将NULL替换为0,再将0转换为该类型CPU对应的空指针内部值。
7.函数指针
  1. void fun(void);
  2. void (*fp)()=fun;

  3. cout<<*fp<<fp<<endl;
上述代码执行后,我们可以发现*fp与fp的值是相等的,这与其他类型的指针变量是不同的。(函数编译后是什么样的指令形式?)
这也导致了利用函数指针调用函数时具有一下两种不同的形式:
  1. (*fp)();
  2. fp();
两者的结果是一样的。虽然前者看起来更符合指针的定义,但是ANSI C也接受后者这种形式。
8.函数fun的声明可以位于另一个函数的体内。但是不可以在其体内进行定义。
并且函数fun 可以在其声明的函数体以外的地方调用。
<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>
阅读(118) | 评论(0) | 转发(0) |
0

上一篇:Cpp 运算符优先级

下一篇:将博客搬至CSDN

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值