关于c语言指针数组的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 06:19:07
#include"stdio.h"
main()
{
char *p[5]={"aaaaaaaaaaaaaaaa","bbbbbbbbbbbb","ccccccccc","ddd","eeeeeeeeeeeeeeeeeee"};
int i ;
char *q;
printf("111111111111111%s\n",p);
printf("111111111111111%s\n",p[0]);
for(i=0;i<5;i++)
{
printf("%s\n",p[i]) ;
printf("%s\n",(p[0]+i)) ;
}
q=p[0]; //q存放aaaaaaaa的地址 所以*p
printf("%s\n",q);
// for(i=0;i<5;i++)
// printf("%s",*q++) ;
}

1、为什么输出p和p[0]的结果不同?
2、为什么输出(p[0]+i)和q的时候不需要加* ?
3、最后如何才能使q输出数组p全部的值?
谢谢

1、p是数组首地址,由于是局部变量,这个地址应该是栈中的一个地址。p[0]是p第一个成员的数据,这个数据是char型指针,并且指向了常量区中的“aaaaaaaaa”字符串,所以这两个地址肯定是不一样的。
2、p[0]和q的类型都是char *,本身就是一个字符串地址,和printf的
%s参数要求一致,所以不用加*
3、printf一次只能打一个字符串,所以循环一下就可以了:
for(i=0;i<5;i++) {
q = p[i];
printf("%s",q);
}