首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于"int demo[4][2]",为什么所有这些在震级上都是相同的:&demo[1],demo[1],demo+1,*(demo+1)?类型呢?

对于"int demo[4][2]",为什么所有这些在震级上都是相同的:&demo[1],demo[1],demo+1,*(demo+1)?类型呢?
EN

Stack Overflow用户
提问于 2013-05-13 07:14:12
回答 1查看 75关注 0票数 1

正当我放松地认为我对数组上下文中的指针有了一个公平的理解时,我在接下来的程序中再次陷入低谷。我已经理解了数组arrarr&arr在大小上是相同的,但是类型不同,但我没有对下面程序的输出有一个坚实的把握。我试图将它可视化,但只取得了部分的成功。如果你能对这件事给出一个严格而详细的解释,我会很感激,这样像我这样的人就能很好地解决这个困惑。

在下面的程序中,我使用了一个"2D“数组demo[][2].I知道demo[]将是大小为2的array of arrays,我还知道单独使用的demo将是(*)[2].Still类型,我对以下内容感到困惑:

1)为什么&demo[1]demo[1]相同?demo[1]不应该是第二个数组的地址吗?&demo[1]到底是什么?为什么与第二个数组的地址相同?

2)我知道第二个printf()和第四个是相同的,因为demo[1]只是*(demo+1).But,所以我用它来说明point.How是否等于第三个printf(),即demo+1如何等于*(demo+1)E 223d24与*(demo+1)相同是众所周知的,但是demo+1如何等于*(demo+1)?E 128如何才能“某物”等于“某物”的值>E 229。

3) --因为它刚刚证明了我不是很聪明,我应该停止我的猜测游戏,问你一个关于类型是什么的结论性的答案:

&demo1 1

demo1

demo+1

代码语言:javascript
复制
#include<stdio.h>

int main(void)
{
    int demo[4][2]= {{13,45},{83,34},{4,8},{234,934}};
    printf("%p\n",&demo[1]);
    printf("%p\n",demo[1]);  //Should have cast to (void*),but works still
    printf("%p\n",demo+1);
    printf("%p\n",*(demo+1));
}

输出:

代码语言:javascript
复制
0023FF28
0023FF28
0023FF28
0023FF28
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 07:28:43

demo[1]是数组demo的第二个成员,也是一个数组本身。与任何其他数组一样,当它不是&sizeof操作符的主题时,它将计算为指向其第一个元素的指针--也就是说,demo[1]的计算结果与&demo[1][0]相同,&demo[1][0]是数组demo[1]中第一个int的地址。

&demo[1]是数组demo[1]的地址,因为数组的地址和该数组的第一个成员的地址必然是相同的位置,所以&demo[1]等于&demo[1][0],后者等于裸demo[1]。这是关键的洞察力-数组的第一个元素与数组本身在内存中的位置相同,就像struct的第一个成员与结构本身在内存中的位置一样。打印&demo[1]demo[1]时,不是要打印指向数组和数组的指针,而是要打印指向数组的指针和指向数组的第一个成员的指针。

demo+1demo的第二个成员的地址。*(demo+1)是该成员本身(它是数组demo[1]),但由于该成员是数组,因此它计算为指向其第一个成员的指针。如前所述,它的第一个成员必须与数组本身并置。这并不是说“某物”等于“某某物”的值--因为当你在这样的表达式中使用数组时,它不会计算到数组本身。

  • &demo[1]是指向demo[1]的指针,这是一个2 int的数组。所以它的类型是int (*)[2]
  • demo[1]是一个2 int的数组。它的类型是int [2]。但是,在表达式中使用时,如果表达式不是&sizeof运算符的主题,则它将计算为指向其第一个成员的指针,该指针是一个具有int *类型的值。
  • demo+1是指向demo[1]的指针,其类型为int (*)[2]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16516620

复制
相关文章

相似问题

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