我很想知道为什么相同数组(即数组b)的地址在传递到函数操纵()之前和之后都会发生变化,如输出图片所示。

请分享你的想法,并帮助我解决这个问题。谢谢!
#include <stdio.h>
void manipulation(int *pa,int *pb){
int i;
for(i=0;i<10;i++){
*(pb+i)=*(pa+i);
printf("%d\t %04x\n",*pb+i,&pb+i);
}
}
int main(){
int a[10],b[10];
int i;
int *point;
point = &b[0];
printf("Enter the array elements\n");
for(i=0;i<10;i++){
scanf("%d\n",&a[i]);
}
for(i=0;i<10;i++){
printf("%04x\n",&point+i);
}
manipulation(&a[0],&b[0]);
return 0;
}发布于 2015-01-25 01:38:40
是的,真正的问题是比较point的地址和pb的地址。
尝试使用point + i (或&point[i])和pb + i (或&pb[i])。我相信你会得到预期的答案。
如果您好奇的话,&point + i是局部变量point加上i值在内存中的位置。&pb + i是参数pb加上i值在内存中的位置。它们是不同的变量,因此它们在内存中有不同的位置。
发布于 2015-01-25 01:39:09
因为您打印(指针的地址)+ i:
printf("%04x\n",&point+i);
printf("%d\t %04x\n",*pb+i,&pb+i);要打印指针+ i:
printf("%04x\n",point+i);
printf("%d\t %04x\n",*pb+i,pb+i);还有一个窃听器在里面:
printf("%d\t %04x\n",*pb+i,pb+i);*pb+i被解释为(*pb) + i,它是数组加i的第一个值,或者简单地说是pb[0]+i。
你似乎得到了正确的答案,因为你的数组是12.
你可能想要这个:
printf("%d\t %04x\n",*(pb+i),pb+i);或者简单地说:
printf("%d\t %04x\n",pb[i],pb+i);发布于 2015-01-25 02:48:27
点存储数组的地址a &point打印点的地址,并在循环中添加4。&pb的情况也是如此。28Fe8是存储点的地方,28fed 4是存储pb的地方。
https://stackoverflow.com/questions/28132258
复制相似问题