刚开始学习c语言时对这块不是很了解,非常困惑,后来随着学习的深入,终于明白了其中的不同,希望以下文章能对你有所帮助。
0是个整型字符,类似于1,2,3这样的整型。单引号括起来的是字符常量,只能有一个字符,而双引号括起来的是字符串常量,可以有多个字符,所以 ‘0’ 是字符常量,c语言用ASCII码来进行存储,一个字符占用一个字节,由于定义的char类型,所以在char类型里写10进制0代表的就是\0, ‘0’ 在ASIIC码中对应的十进制数是48,依次类推 ‘1’ 对应的十进制数是49,他们也可以在程序中进行运算。在ASCII码表中的转义字符 \0 是字符串结束的标志,对应的十进制的数字就是0,最后 “0” 是字符串常量,例如:“Hello World”,“abc123”,都是字符串常量。
下面通过一个代码来理解 0 ,‘\0’ 以及 ‘0’,先简单了解一个函数,
- strcpy函数,char* strcpy(char * destination, const char * source );
- 源字符串必须以\0结尾,会将源字符串中的\0拷贝到目标空间
这是未初识化时的arr1
初始化后
如果我们运行以下代码会报错,因为arr[]中没有 \0 的结束标志
int main()//会报错
{
char arr[] = { 'd','e','f'};
char arr1[10] = "abc";
strcpy(arr1, arr);//将arr中的内容拷贝到arr1中
printf("%s", arr1);
return 0;
}
但是当我们加上0或 ‘\0’ 后程序便会运行成功,加上’0’会报错,说明在某些特定的场合下,十进制数0和转义字符’\0’是一致的
int main()
{
char arr[] = { 'd','e','f',0};//可将0替换为'\0'
char arr1[10] = "abc";
strcpy(arr1, arr);//将arr中的内容拷贝到arr1中
printf("%s", arr1);//def
return 0;
}
以下是关于 ‘0’ 的代码
#include <stdio.h>
int main()
{
char a = '0';
char b = '1' - '0';
char c = '0' - 8;
char d = 'a' - '1';
printf("%d\n", a);//48
printf("%d\n", b);//1
printf("%c\n", b);//一个图形
printf("%d\n", c);//40
printf("%c", d);//字符0
return 0;
}
关于字符串的定义问题
字符串是以 \0 作为结束标志
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char str1[5] = { 'a','b','c' };
char str2[] = { 'a','b','c',0 };
char str3[] = { 'a','b','c','\0' };
char str4[] = "12345";
printf("str1 = %s\n", str1);//abc
printf("str2 = %s\n", str2);//abc
printf("str3 = %s\n", str3);//abc
printf("str3 = %s\n", str4);//12345
return 0;
}
这个代码意思是由于定义的char类型,所以在char类型里写10进制0代表的就是\0