C语言陷阱【词法陷阱 之字符与字符串】
字符与字符串
C语言中的单引号' ',与双引号" ",含义不同。
用单引号引起的一个字符实际上表示一个整数,该整数值为该字符在编译器采用的字符集中的序列值。所以,对于采用ASCLL字符集的编译器,'a'对应的整数值为97(十进制)或0141(八进制)。如:
#include
#include
#include
int main()
{
int a=0;
Int b=0;
char p='a';
char s[20];
a=p;
b=p+1;
itoa(a, s, 2);
printf("'a'二进制 --> %s ", s);
printf("'a'八进制 --> %o ", a);
printf("'a'十进制 --> %d ", a);
printf("'a'+1十进制 --> %d ", b);
}
该程序输出为:
用双引号引起的字符串,代表的是一个指向无名字符数组的起始字符的指针,该数字符数组的内容为,双引号之间的字符加一个二进制值为0的字符('')。
如:char * p="abcde";
与 char p[ ]={'a','b','c','d','e',''};
是等效的;
小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:487875004适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程
因为用单引号括起来的一个字符代表一个整数,而用双引号括起来的一个字符代表一个指针,如果两者混用,那么编译器的类型检查功能会检查到这样的错误。如:
Char * p1='u';
在编译时会报错,因为'u'代表一个整数值,并不是一个指针。
然而某些编译器对函数的参数并不进行类型检查,特别是printf函数的参数类型。因此如果把printf(''hello world"),误写为printf('hello world'),则会产生难以预料的错误!
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。