猿问

有以下程序段 ,谁来帮我详细讲解一下啊?

char arr[]="ABCDE"; 
char *ptr; 
for(ptr=arr;ptr<arr+5;ptr++) 
printf("%s\n",ptr); 
输出结果是(D) 
D). 
ABCDE 
BCDE 
CDE 
DE 
E

暮色呼如
浏览 162回答 2
2回答

慕哥9229398

字面字符串里头 \开始的是一个转义字符。这里\0代表的是一个空字符。sizeof()当括号里头是数组名的时候 它计算的是整个数组的长度。所以是7。strlen()是计算字符串的长度。c里头字符串是以空字符结尾作为字符串结束的标志所以strlen()在遇到空字符的时候就已经认为字符串结束了。所以这里它只认为字符串的长度为2.是a和0。空字符不计算在内。int main()&nbsp;{&nbsp;char a[7]="a0\0a0\0";int i,j;&nbsp;i=sizeof(a);&nbsp;j=strlen(a);&nbsp;printf("%d %d\n",i,j);printf("%s",a);system("pause");return 0;}&nbsp;printf()输出字符数组整个输出是&nbsp;7 2&nbsp;&nbsp;a0可以看到空字符是字符串结尾的标志是很重要 因为很多函数是基于此来运用的。

不负相思意

char arr[]="ABCDE"; //声明一个字符数组char *ptr; //声明一个字符指针;for(ptr=arr;ptr<arr+5;ptr++)&nbsp;&nbsp;printf("%s\n",ptr);&nbsp;第一次循环,ptr指向数组首地址;从A开始打印;第二次,ptr++指向数组首地址+1;从B开始打印;...依次推就能得出答案;你一定会继续问:那为什么不输出ABCDE?原因在于,printf函数输出数组型字符串时,从数组名标记的地址开始读取内容,直到内存中出现标记为‘\0’的内存单元才停止.char arr[]="A\0B\0C\0D\0E\0";&nbsp;char *ptr;ptr = arr;for(ptr=arr;ptr<arr+10;ptr++)&nbsp;printf("%s",ptr);&nbsp;将会得出ABCDE的打印
随时随地看视频慕课网APP
我要回答