数组在通过引用传递给函数之前和之后显示不同的地址
Array shows different addresses, before and after being passed to a function by reference
我很想知道为什么同一个数组的地址,即我的例子中的数组 b 在传递给函数 manipulation() 之前和之后发生变化,如输出图片所示。
请分享您的想法并帮助我解决这个问题。谢谢!
#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;
}
是的,真正的问题是将 point
的地址与 pb
的地址进行比较。
尝试使用 point + i
(或 &point[i]
)和 pb + i
(或 &pb[i]
)。我相信你会得到预期的答案。
如果你好奇,&point + i
是局部变量point
加上i
的值在内存中的位置。 &pb + i
是参数 pb
加上 i
的值在内存中的位置。它们是不同的变量,所以它们在内存中的位置不同。
因为你打印了 (address of your pointer) + 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
.
你似乎得到了正确的答案,因为你的数组是 1 2 3 ...
你可能想要这个:
printf("%d\t %04x\n",*(pb+i),pb+i);
或者简单地说:
printf("%d\t %04x\n",pb[i],pb+i);
point存放数组a的地址。 &point 打印 point 的地址并在循环中加 4。 &pb 也是如此。 28fee8是存放point的地方,28fed4是存放pb的地方
我很想知道为什么同一个数组的地址,即我的例子中的数组 b 在传递给函数 manipulation() 之前和之后发生变化,如输出图片所示。
#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;
}
是的,真正的问题是将 point
的地址与 pb
的地址进行比较。
尝试使用 point + i
(或 &point[i]
)和 pb + i
(或 &pb[i]
)。我相信你会得到预期的答案。
如果你好奇,&point + i
是局部变量point
加上i
的值在内存中的位置。 &pb + i
是参数 pb
加上 i
的值在内存中的位置。它们是不同的变量,所以它们在内存中的位置不同。
因为你打印了 (address of your pointer) + 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
.
你似乎得到了正确的答案,因为你的数组是 1 2 3 ...
你可能想要这个:
printf("%d\t %04x\n",*(pb+i),pb+i);
或者简单地说:
printf("%d\t %04x\n",pb[i],pb+i);
point存放数组a的地址。 &point 打印 point 的地址并在循环中加 4。 &pb 也是如此。 28fee8是存放point的地方,28fed4是存放pb的地方