c语言指针问题
为什么arr运行出来是1啊?这个怎么理解?求大神{:1_889:}#include <stdio.h>
#define N 6
void pointer_self_add(){
int arr[N]={1,2,3,4,6,5};
int *p;
int j;
p=arr;
j=*p++;//把p赋值给j,在++
printf("%d,%d,%d\n",arr[0],j,*p);
j=p[0]++;//把p赋值给j,然后对p++,
//等价于(*p)++
printf("%d,%d,%d\n",arr[2],j,*p);
}
int main(){
pointer_self_add();
return 0;
} arr运行出来是3 啊
2个打印 分别结果
1,1,2
3,2,3 运行结果如1楼 一楼说的没错,个人理解不知道对不对
j=p++;//把p赋值给j,然后对p++,这里的p实际上是arr的地址,后面的你应该自己就懂了 小益达 发表于 2021-3-31 15:01
一楼说的没错,个人理解不知道对不对
j=p++;//把p赋值给j,然后对p++,这里的p实际上是arr ...
照这么理解的话*P不是等于2? https://www.runoob.com/try/runcode.php?filename=helloworld&type=c,菜鸟C 在线编译运行结果:
1,1,2
3,2,3 #include <stdio.h>
#define N 6
void pointer_self_add(){
int arr={6,40,5,10,3,20};
int *p;
int j;
p=arr;
j=*p++;//把p赋值给j,在++,即,j=arr;
printf("%d,%d,%d\n",arr,j,*p);
//arr 是第一个元素
//*p++ 指向下一个元素,即第二个元素,为40
//故输出 6 6 40
j=p++;//把p赋值给j,然后对p++,
//注意此时指针p指向第二个元素,即j=p=arr=40;
//等价于(*p)++
printf("%d,%d,%d\n",arr,j,*p);
//arr 是第三个元素
//p=arr=40;
//然后p++变成41
//故输出 5 40 41
}
int main(){
pointer_self_add();
return 0;
}
我换了里面的元素,也加了注释,你参考看一下哈 VS结果:
1,1,2
3,2,3.
至于为什么第二*p = 3,是因为p++的缘故:p = 2,++后就变成3。你可以打印出数组,结果为{1,3,3,4,6,5} 你用什么编译的?我的gcc编译结果为
1,1,2
3,2,3
wsxzaq 发表于 2021-3-31 16:05
VS结果:
1,1,2
3,2,3.
请问一下,为啥打印数组后arr会变成3
页:
[1]
2