从人物的角度来看:
char a[]="Visual C++";
printf("length = %d\n", strlen(a));
for(int i = 0; i<strlen(a); i++)
printf("a[%d] = %c (ASCII %d)", i, a[i], a[i]);
使用这样的代码,您将获得
length = 11
a[0] = V (86)
a[1] = i (105)
a[2] = s (115)
a[3] = u (117)
a[4] = a (97)
a[5] = l (108)
a[6] = (32)
a[7] = C (67)
a[8] = + (43)
a[9] = + (43)
a[10] = (0)
根据ASCII 表检查这些值,您可以看到为什么它显示 11(NULL终止符)
char b[] = "Visual\C++";
你的第二个字符串中有一个转义字符\,有很多列表,但它基本上告诉编译器忽略下一个字符,因为它不是要打印的,而是一些特殊的。就像换行符一样:'\n'
根据您对原始帖子的评论,我想我需要澄清两件事:
额外说明 1:
特殊字符,例如换行符'\n'或空终止符'\0'仅占用 1 个额外字节的空间。
额外说明 2:
sizeof(a)将为您提供数组的大小(字符数),因为它充满了每个只需要 1 个字节的字符。当您在其他占用更多空间的类型上使用它时,您需要再执行一步:
int arr[4] = {0};
int size_of_arr = sizeof(arr/sizeof(int));