c++ - 指针和多维数组

标签 c++

<分区>

Possible Duplicate:
How do I use arrays in C++?
Is 2d array a double pointer?
Two dimensional arrays and pointers

我知道这是一个非常基本的问题,但我没有通过谷歌搜索来解决这个问题。这就是我在这里发布它的原因。 在 C++ 中考虑声明 int x[10];

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

类似的声明

 int x[10][20];

x是个什么样的变量?这里。当我做的时候

 int **z = x;

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

 int *p[10];

那么x之间有区别吗?和 p (在他们的类型中)??因为当一个人声明 int x[10]int *p那么分配 x 是有效的至 p但在二维数组的情况下不是这样吗?为什么? 有人可以帮我解决这个问题,或者提供一个很好的资源 Material 。

最佳答案

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

int x[10][20];

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

int *p[10];

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

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

This is a 1-dimensional array with x being the base pointer that is it contains the address of the first element of the array. So x gives me that address and *x gives the first element.

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

阅读FAQ关于这个主题你想知道的一切。

关于c++ - 指针和多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511779/

相关文章:

java - 文件格式规范中的空终止字符短语

c++ - zsh/sh/bash 如何检查从 C++ 程序启动的命令 "cat &"的信号 SIGTTIN

c++ - 运算符 << 中的未格式化输出

c++ - 像 JAXB 一样在 QT 中生成 XML

c++ - 在布局上调整 QGraphicsView 小部件的大小

c++ - Emacs 和 C++

c++ - Qt 创建者 : “inline function used but never defined” – why?

c++ - 公式一样,为什么输出不一样?

c++ - 未按预期调用析构函数

c++ - 如何识别抛出的特定异常