win10+dev-c++
#include
int main(void){
int a[3],*p,i;
p=&a[0];
for(i=0;i<3;i++){
*p=3*i;
p++;
printf("第%d个元素是%d\n",i,*(p+i));
}
return 0;
}
*p的值突然蹦到82了。
用
p=&a[0];
和循环内 (p+i)=2i;即可实现。
我是想通过指针的方式把数组赋值为0,3,6.
你的数组a没有初始化,里面的初值并不是0,而是随机分配的内存
而p++的操作是移动指针,从指向a[0]改为指向a[1],而a[1]里存什么都有可能,突然变成-10086也不要奇怪
既然你的循环本来就是要给a进行赋值
那么你应该查看赋值之后的结果
看它赋值之前是什么是没有意义的行为
你现在的行为就是随便分配一块内存然后看里面残留的是什么值
要这样写
#include<stdio.h>
int main(void){
int a[3],*p,i;
p=&a[0];
for(i=0;i<3;i++){
*p=3*i;
p++;
}
p=&a[0]; //指针重新指向数组
for(i=0;i<3;i++){
// printf("%d",p[i]); //打印数组各元素值
printf("%d",a[i]); //打印数组各元素值
}
return 0;
}
你的问题出在,下面
#include<stdio.h>
int main(void) {
int a[3], * p, i;
p = &a[0];
for (i = 0; i < 3; i++) {
*p = 3 * i;
printf("第%d个元素是%d\n", i, *p);
p++;
}
return 0;
}