可能重复:
如何在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)
然后x和p(在其类型上)有区别吗?因为当一个声明int x[10]和int *p那么它是有效的分配x到p,但它不是那么二维数组的情况下?为什么?有人可以帮我清除这个问题,或者在此方面提供很好的参考资料。
数组和指针不是一回事。在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,了解有关此主题的所有信息。
| 归档时间: |
|
| 查看次数: |
4509 次 |
| 最近记录: |