帮忙看看这个指针程序哪错了

来源:百度知道 编辑:UC知道 时间:2024/05/11 04:28:30
main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);
}

你是想打印出来0,1,2,3...9?
问题出在打印语句上啊
第一个for循环确实把a赋值了,
但p一直在++,
执行完的时候p已经指向a[10]了,
所以在打印之前,
要把p的指向重新指到a[0].

加一行p=a就可以.

main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
p=a; //加在这里.
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);
}

i没有初始化吧?

*(p++)=i; 不确定的地方加上括号,就不会混了。

p=a;

*p也相当于=a;

你这里
*p++=i;
先求p++;再*p,再=i.
输出a=0
a=1
a=2
a=3
a=4
a=5
a=6
a=7
a=8
a=9

for(i=0;i<10;i++)
*p++=i;
p=a; //添加这一句,前面的for已经改变p,p=a+10;
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);

在第一个for循环之后,指针p就已经指到了数组a的最后一个元素了。所以第二个for循环打印的就是不数组a里面的东西了。这样改下:
main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
p=a;/////////////////////////////////
/////////或者改成p-=10;
for(i=0;i<10;i++)
printf("a[%