C语言简单问题,请高手回答下,谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:22:43
/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{char *a[]={"AAA","BBB","CCC","DDD"};
char *P;
int j=0;
P=a;
for(;j<4;j++)
printf("%s\n",*P++);
}

运行总出现内存不能为read,请解析下,谢谢!
去掉也不行啊!!!!!!!!!

a是指向a[0]的指针,a[0]是"AAA"的指针,因此,a是字符指针的指针。而p只是一个字符指针,因此两者类型不同,不能相互赋值。因此应该将char *p;改为char **p;按道理,你这个代码应该不能通过编译。

定义数组时为什么要加个星星呢?

两个错误:
将P=a;
改为P=*a;

将printf("%s\n",*P++);
改为printf("%s\n",P++);

但是改过以后,你的代码不会输出:
AAA
BBB
CCC
DDD
只会输出
AAA
AA
A

因为字符P指向a的行首指针,所以P++的位移只是将P指向其后的一个字符,
而不是下一个行首指针