学习C语言的,对于0,'0',‘\0’ 三个零并不陌生,但有时候确不知道它们是怎样相等又怎样不相等的。
首先说明一下三个零:
0: 整型数字0
'0':字符ASCII是48
'\0':转义字符,表示字符串结束,ASCII是0
下面用一段代码说明三个0 之间的异同:
-
#include <stdio.h>
-
#include <string.h>
-
#include <stdlib.h>
-
-
int main()
-
{
-
char zero = '0';
-
int izero = 0;
-
char *p = "a0";
-
-
printf("zero:%d izero:%d\n", zero, izero);
-
int i = 0;
-
for(i;i < 3;i++)
-
{
-
printf("p[%d]: *%d*\n",i, *(p + i));
-
}
-
-
-
printf("zero char:*%c* izero char:*%c*\n", zero, izero);
-
i = 0;
-
for(i;i < 3;i++)
-
{
-
printf("p[%d]: *%c*\n",i, *(p + i));
-
}
-
-
return 0;
-
}
代码运行结果:
zero:48
==》字符0的ASCII值 izero:0
==》整数0的值
p[0]: *97*
==》字符a的ASCII值
p[1]: *48*
==》字符0的ASCII值
p[2]: *0*
==》'\0'的ASCII值
zero char:'0'
==》字符'0'按字符形式打印的字符0 izero char:''
==》整数0 以字符形式打印为NULL,相当于'\0'
p[0]: *a*
==》字符a
p[1]: *0*
==》字符0
p[2]: **
==》'\0'以字符打印,打印不出来。
通过此例可以看出,0和'\0'在ASCII值和字符都是一样的,字符'0' ASCII值是48
在memset函数中设置一个数组的内容是NULL时,可以写成memset(array, 0, sizeof(array)); 或者memset(array, 0, sizeof(array));
阅读(1845) | 评论(0) | 转发(0) |