指针和多维数组

new*_*bie 3 c++

可能重复:
如何在C ++中使用数组?
2d数组是双指针吗?
二维数组和指针

我知道这是一个非常基本的问题,但是没有为我解决任何问题。这就是为什么要在这里发布它。在C ++中考虑声明int x[10];

这是一维数组,其中x是基本指针,它包含数组第一个元素的地址。因此,请x给我该地址并*x提供第一个要素。

同样的声明

 int x[10][20];
Run Code Online (Sandbox Code Playgroud)

x这里是什么样的变量。当我做

 int **z = x;
Run Code Online (Sandbox Code Playgroud)

编译器说它不能转换int (*)[20]int **。为什么这样做cout<<x;cout<<*x;给出相同的值?而且如果我将指针数组声明为

 int *p[10];
Run Code Online (Sandbox Code Playgroud)

然后xp(在其类型上)有区别吗?因为当一个声明int x[10]int *p那么它是有效的分配xp,但它不是那么二维数组的情况下?为什么?有人可以帮我清除这个问题,或者在此方面提供很好的参考资料。

Car*_*rum 5

数组和指针不是一回事。在C和C ++中,多维数组只是“数组数组”,不涉及指针。

int x[10][20];
Run Code Online (Sandbox Code Playgroud)

是一个由20个元素组成的10个数组的数组。如果x在上下文中使用它会衰减为指向第一个元素的指针,那么最终会得到指向这20个元素数组之一的指针-那就是您的int (*)[20]。请注意,这样的事情不是指向指针的指针,因此无法进行转换。

int *p[10];
Run Code Online (Sandbox Code Playgroud)

是一个由10个指针组成的数组,所以是的,它与x不同。

特别是,您可能会遇到麻烦,因为您似乎认为数组和指针是同一回事-您的问题是:

这是一维数组,其中x是基本指针,它包含数组第一个元素的地址。所以x给我那个地址,* x给我第一个元素。

这是不对的。一维x是一个数组,只是在某些情况下,数组会衰减为指向其第一个元素的指针。

阅读FAQ,了解有关此主题的所有信息。


ale*_*kop 5

多维数组只是语法糖。在幕后,这只是一个 10 * 20int秒长的一维数组。当您在x[5][6]编译器中访问一个元素时,会生成等价于x[5 * 20 + 6];


归档时间:

查看次数:

4509 次

最近记录:

9 年 前