您的位置:首页 > 其它

C陷阱与缺陷

2013-02-02 17:44 260 查看
1.字符与字符串

  用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。因此,对于采用ASCII字符集的编译器而言,'a'的含义与0141(八进制)或者97(十进制)严格一致。

  用双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制为零的字符'\0'初始化。

  下面的这个语句:

  printf("Hello world\n");



  char hello[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\n', 0};

  printf(hello);

是等效的。

2.声明

  float f, g;

  这个声明的含义是:当对其求值时,表达式f和g的类型为浮点数类型(float)。因为声明符与表达式相似,所以我们也可以再声明符中任意使用括号:

  float ((f));

  这个声明的含义是:当对其求值时,((f))的类型为浮点类型,由此可以退知,f也是浮点类型。

  同样的逻辑也适用于函数和指针的类型声明,例如:

  float ff();

  这个声明的含义是:表达式ff()求值结果是一个浮点数,也就是说,ff是一个返回值为浮点类型的函数。类似地,

  float *pf;

  这个声明的含义是*pf是一个浮点数,也就是说,pf是一个指向浮点数的指针。

  以上这些形式在声明中还可以组合起来,就像在表达式中进行组合一样。因此,

  float *g(), (*h)();

  表示*g()与(*h)()是浮点表达式。因为()结合优先级高于*,*g()也就是*(g()):g是一个函数,该函数的返回值类型为指向浮点数的指针。同理,可以得出h是一个函数指针,h所指向函数的返回值为浮点类型。

3.运算符

  int a,b;

  if(a & b) ...

  这里的&是按位与运算符,比如8 & 7 == 0, 8 & 9 == 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: