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

指向数组
EN

Stack Overflow用户
提问于 2011-10-01 00:53:20
回答 2查看 121关注 0票数 1

有这样的代码:

代码语言:javascript
复制
int tab[14][2];
int (*wskk)[2] = tab; // &tab makes error

int tab2[2];
wskk = &tab2; // tab2 makes error

为什么可以使用一个指针来指向两个不同维数的数组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-01 01:05:44

要理解发生了什么,你必须熟悉一些关键概念:

  • 多维数组是数组的数组;
  • 数组的名称衰减为指向它的第一个元素的指针;
  • 数组的类型是“wskk to an array of 2”

因此,如果您编写tab,您将获得一个指向tab的第一个元素的指针,也就是它的第一行;该行的类型为int[2],因此指向它的指针的类型为int (*)[2],这正是您的指针的类型。因此,您可以将tab赋值给wskk,它现在将指向tab的第一行。

不能将&tab赋值给它,因为这会生成一个指向整个多维数组的指针,该数组的类型为int (*)[14][2]

至于第二部分,它甚至更简单:tab2是一个由两个int组成的数组,所以它的类型是int[2]。如果通过&操作符获得指向它的指针,则会得到一个int (*)[2],这是您的指针的类型。实际上,这是有道理的:tab2和一行tab实际上是相同的东西(一个由2个int组成的数组)。

不能将tab2赋值给它,因为tab2会衰减为指向其第一个元素的指针,即int *

票数 5
EN

Stack Overflow用户

发布于 2011-10-01 01:01:07

将数组到指针的转换设置为显式,可能会变得更加清晰:

代码语言:javascript
复制
int tab[14][2];
int (*wskk)[2] = &tab[0]; // point at tab[0], which has type array of 2 int

int tab2[2];
wskk = &tab2;              // point at tab2, which has type array of 2 int

另请参阅:How do I use arrays in C++?

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

https://stackoverflow.com/questions/7613584

复制
相关文章

相似问题

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