首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将int[][]赋值为整数**

将int[][]赋值为整数**
EN

Stack Overflow用户
提问于 2014-08-17 04:58:47
回答 4查看 2.2K关注 0票数 4

据我所知,在某些上下文中,数组被转换为指向其第一个元素的指针:

代码语言:javascript
复制
int a[5];
int * p;

p = a;

遵循这种方法,并考虑到我可以将数组赋给指针,为什么不能将二维数组赋给指向指针的指针呢?

代码语言:javascript
复制
int a[5][5];
int ** q;

q = a;

但是,我可以将一个指针数组分配给一个指向指针的指针:

代码语言:javascript
复制
int * p[5];
int ** q;

q = p;

如果一个数组被转换成指向第一个元素的指针,那么当q= a出现在第二个例子中时,a应该是指向a的指针,a应该是指向a的指针,对吧?

此外,如果我这样做,我不会得到错误:

代码语言:javascript
复制
cout << **a;

提前谢谢你,希望你能帮我理解。

EN

回答 4

Stack Overflow用户

发布于 2014-08-17 05:04:12

问题是一个数组int a[5][5];存储了25个连续的int

int **q;这样指向数组/指针的指针期望找到指向int的连续指针数组。

这就是为什么你想要做的任务是不可能的。

票数 6
EN

Stack Overflow用户

发布于 2014-08-17 05:05:11

可以将多维数组分配给单个指针

代码语言:javascript
复制
int a[5][5];
int *p = a;

因为存储器被分配为按行组织的单个块。

代码语言:javascript
复制
a = a11 a12 a13
    a21 a22 a23    

a = a11 a12 a13 a21 a22 a23 
票数 3
EN

Stack Overflow用户

发布于 2014-08-17 05:16:23

对于多维数组,如果要指向单个(标量)值,则应使用以下声明:

代码语言:javascript
复制
int a[5][5];
int (*q)[5]; /* pointer to five-element array of basic type int */

q = a;
q[0][0]; /* equivalent to a[0][0] */

其中5是“列”大小(紧挨着最左边的“行”大小)。一般来说,对于更多维度,请记住规则是,只有最左边的大小被替换为声明器的(*q)部分。

事实上,当你编写函数时,它有多维数组参数,那么对于编译器来说,它被认为是上面形式的,例如:

代码语言:javascript
复制
int foo(int a[5][5]) { ... }

被有效地替换为:

代码语言:javascript
复制
int foo(int (*a)[5]) { ... }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25343928

复制
相关文章

相似问题

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