首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针数组算法

指针数组算法
EN

Stack Overflow用户
提问于 2012-06-24 06:39:59
回答 2查看 108关注 0票数 1

我在实验指针数组,地址计算算法,我对上面code.Could的输出感到困惑,有人解释了发生了什么吗?

代码语言:javascript
复制
void foo()
{
    int i=10,k=3,l=20,m=30;
    int *ary[2];
    ary[0]=&i;
    int b=20;
    ary[1]=&k;

    printf("%d\n",ary[0][1]);
}

输出为3

第二程序

代码语言:javascript
复制
void foo()
{
    int i=10,k=3,l=20,m=30;
    int *ary[2];
    ary[0]=&i;
    int b=20;
    ary[1]=&b;

    printf("%d\n",ary[0][1]);
}

输出为20.

在这些代码中,地址计算是如何完成的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-24 06:52:13

在这两个代码示例中,ary[0]都是指向单个整数的指针。因此,当您执行array[0][1]时,您将访问超出界限的指针。因此,这两个代码示例的行为都是未定义的。

您在特定编译器上看到的行为的原因可能是,您不使用的所有变量都存储在寄存器中,而不是内存中(或者它们根本没有存储,因为您从未使用它们)。

所以在例1中,内存中唯一的变量是i和k,在示例2中,内存中的唯一变量是i和b,所以在示例1中,k是内存中i后面的变量,而示例2则是b

票数 3
EN

Stack Overflow用户

发布于 2012-06-24 06:52:03

你的论点是

代码语言:javascript
复制
int *ary[]

在函数参数中,数组衰减为指针。所以你基本上有

代码语言:javascript
复制
int** ary

然后,在索引0处将指针设置为单个变量的值,这大概是一个有效的索引。

代码语言:javascript
复制
ary[0]=&i;

然后你的代码打印

代码语言:javascript
复制
ary[0][1]

基本上

代码语言:javascript
复制
( &i )[1]

触发未定义的行为,因此无论得到什么结果都是有效的结果。

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

https://stackoverflow.com/questions/11175473

复制
相关文章

相似问题

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