首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组在通过引用传递给函数之前和之后显示不同的地址。

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

Stack Overflow用户
提问于 2015-01-25 01:29:29
回答 3查看 84关注 0票数 0

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

请分享你的想法,并帮助我解决这个问题。谢谢!

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-25 01:38:40

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-01-25 01:39:09

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

代码语言:javascript
复制
printf("%04x\n",&point+i);
printf("%d\t  %04x\n",*pb+i,&pb+i);

要打印指针+ i:

代码语言:javascript
复制
printf("%04x\n",point+i);
printf("%d\t  %04x\n",*pb+i,pb+i);

还有一个窃听器在里面:

代码语言:javascript
复制
printf("%d\t  %04x\n",*pb+i,pb+i);

*pb+i被解释为(*pb) + i,它是数组加i的第一个值,或者简单地说是pb[0]+i。

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

你可能想要这个:

代码语言:javascript
复制
printf("%d\t  %04x\n",*(pb+i),pb+i);

或者简单地说:

代码语言:javascript
复制
printf("%d\t  %04x\n",pb[i],pb+i);
票数 2
EN

Stack Overflow用户

发布于 2015-01-25 02:48:27

点存储数组的地址a &point打印点的地址,并在循环中添加4。&pb的情况也是如此。28Fe8是存储点的地方,28fed 4是存储pb的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28132258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档