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

标签 c++ c arrays pointers

我很想知道为什么同一个数组的地址(在我的例子中是数组 b)在传递给函数 manipulation() 之前和之后会发生变化,如输出图片所示。 enter image description here请分享您的想法并帮助我解决这个问题。谢谢!

#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;
}

最佳答案

因为你打印了(指针的地址)+ 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] +我

你似乎得到了正确的答案,因为你的数组是 1 2 3 ...

你可能想要这个:

printf("%d\t  %04x\n",*(pb+i),pb+i);

或者简单地说:

printf("%d\t  %04x\n",pb[i],pb+i);

关于c++ - 数组在通过引用传递给函数之前和之后显示不同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28132258/

相关文章:

c++ - 避免根据模板运算符的存在来编译某些行

c - 结构中的指针——未知大小的数组

arrays - Groovy 过滤器二维数组

javascript - 内联与可观察数组的绑定(bind)

c - C 中的通用列表包含垃圾值

c++ - 运算符关键字c++

c++ - 如何使 std::make_pair 可与 std::bind* 一起使用?

c++ - 用STL C++实现非递增列表

c - C 中的双指针和三指针

代码从 C 文本文件中读取几行