Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组在通过引用传递给函数之前和之后显示不同的地址_C++_C_Arrays_Pointers - Fatal编程技术网

C++ 数组在通过引用传递给函数之前和之后显示不同的地址

C++ 数组在通过引用传递给函数之前和之后显示不同的地址,c++,c,arrays,pointers,C++,C,Arrays,Pointers,我很想知道为什么同一个数组的地址在传递给函数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)

我很想知道为什么同一个数组的地址在传递给函数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;
}
#包括
无效操作(int*pa,int*pb){
int i;

对于(i=0;i是的,真正的问题是比较
的地址和
pb
的地址

尝试使用
point+i
(或
&point[i]
)和
pb+i
(或
&pb[i]
)。我相信您会得到预期的答案



如果您好奇的话,
&point+i
是局部变量
point
加上
i
的值的内存位置&pb+i
是参数
pb
加上
i
的值的内存位置。它们是不同的变量,所以它们在内存中有不同的位置。

啊,真正的问题是比较
的地址和
pb
的地址

尝试使用
point+i
(或
&point[i]
)和
pb+i
(或
&pb[i]
)。我相信您会得到预期的答案



如果您好奇的话,
&point+i
是局部变量
point
加上
i
的值的内存位置&pb+i是参数
pb
加上
i
的值的内存位置。它们是不同的变量,所以它们在内存中有不同的位置。

啊,真正的问题是比较
的地址和
pb
的地址

尝试使用
point+i
(或
&point[i]
)和
pb+i
(或
&pb[i]
)。我相信您会得到预期的答案



如果您好奇的话,
&point+i
是局部变量
point
加上
i
的值的内存位置&pb+i是参数
pb
加上
i
的值的内存位置。它们是不同的变量,所以它们在内存中有不同的位置。

啊,真正的问题是比较
的地址和
pb
的地址

尝试使用
point+i
(或
&point[i]
)和
pb+i
(或
&pb[i]
)。我相信您会得到预期的答案


如果您好奇的话,
&point+i
是局部变量
point
加上
i
的值的内存位置&pb+i是参数
pb
加上
i
的值的内存位置。它们是不同的变量,所以它们在内存中有不同的位置。

因为您打印(指针地址)+i:

要打印指针+i:

printf("%04x\n",&point+i);
printf("%d\t  %04x\n",*pb+i,&pb+i);
printf("%04x\n",point+i);
printf("%d\t  %04x\n",*pb+i,pb+i);
还有一个bug:

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);
因为您打印(指针地址)+i:

要打印指针+i:

printf("%04x\n",&point+i);
printf("%d\t  %04x\n",*pb+i,&pb+i);
printf("%04x\n",point+i);
printf("%d\t  %04x\n",*pb+i,pb+i);
还有一个bug:

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);
因为您打印(指针地址)+i:

要打印指针+i:

printf("%04x\n",&point+i);
printf("%d\t  %04x\n",*pb+i,&pb+i);
printf("%04x\n",point+i);
printf("%d\t  %04x\n",*pb+i,pb+i);
还有一个bug:

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);
因为您打印(指针地址)+i:

要打印指针+i:

printf("%04x\n",&point+i);
printf("%d\t  %04x\n",*pb+i,&pb+i);
printf("%04x\n",point+i);
printf("%d\t  %04x\n",*pb+i,pb+i);
还有一个bug:

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打印点的地址并通过循环添加4。与&pb的情况相同。28fee8是存储点的位置,28fed4是存储pb的位置。

point存储数组a的地址。&point打印点的地址并通过循环添加4。c也是一样带&pb的ase.28fee8是存储点的位置,28fed4是存储pb的位置。

点存储数组a的地址。&point打印点的地址并在循环中添加4。与带&pb的情况相同。28fee8是存储点的位置,28fed4是存储pb的位置。

点存储数组a的地址。&point打印点的地址并在循环中加4。与&pb的情况相同。28fee8是存储点的位置,28fed4是存储pb的位置。

为什么不写这个
*(pb+i)=*(pa+i);
这样
pb[i]=pa[i]
你对scanf(%d\n,&a[i])有什么期望?
scanf(%d,&a[i]);
为什么不写这个
*(pb+i)=*(pa+i)
这样
pb[i]=pa[i];
你对
点+i(%d\n,&a[i]有什么期望
为什么不写这个
*(pb+i)=*(pa+i);
这样
pb[i]=pa[i];
?你对
&point+i
有什么期待