#include<stdio.h>
void main()
{
int *p, i, a;
p = a;
for( i=0; i < 10; i++ )
{
scanf("%d", p++);
}
for( i=0; i < 10; i++, p++ )
{
printf("%x ", *p);
}
printf("\n");
}
这里的第一个遍历之后指针p已经指向了&a,所以在第二次遍历中打印的是a+9个未知乱码。。
只需把第一次遍历的p++改为p+i即可。。循环赋值之后p仍指向&a. 运行完了,表示结果正确呀。
p++表示指针p移到数组a的下一个元素处,而不是下一个地址。
输出了下地址,p跟p++的值相差4,即一个int型数组元素占4个字节。 21楼正解 p=a;的时候,p里的地址确实与数组指针的地址一样,但是因为定义的指针不是连续的,而数组指针是连续的,虽然p++了,但是没有让a+i与p+i相等,所以p++之后,p成为了野指针?是这个意思吗? 你逐步调试,注意p,即指针指向的地址,,对比前后p值得区别,你会发现地址其实是错的。指针变量的指向地址一当改动就改动,就像全局变量一样。 在每个for语句前加p=a;就OK了,不信试一下,我也是改了一个多钟才发现的 21L正解,楼主的题我复制粘贴运行正常。
页:
1
[2]