【发布时间】:2012-01-26 21:31:24
【问题描述】:
我有一个关于指向二维数组的指针的问题。如果一个数组类似于
int a[2][3];
那么,这是指向数组a的指针吗?
int (*p)[3] = a;
如果这是正确的,我想知道[3] 与int(*p)[3] 的含义是什么?
【问题讨论】:
标签: c++ arrays pointers multidimensional-array
我有一个关于指向二维数组的指针的问题。如果一个数组类似于
int a[2][3];
那么,这是指向数组a的指针吗?
int (*p)[3] = a;
如果这是正确的,我想知道[3] 与int(*p)[3] 的含义是什么?
【问题讨论】:
标签: c++ arrays pointers multidimensional-array
另请注意:
int *p[5] // p is an array of 5 pointers
int (*p)[5] // p points to an array of 5 ints
int (*(p+5))[10] // p is a pointer to a structure where the structure's 5th element has 10 ints .
【讨论】:
你可以像一维数组一样指向二维数组
#include <iostream>
int main()
{
int array[2][2] = {{0,1}, {2,3}}; // array
int *ptr;
ptr=(int*)array;
std::cout << *(ptr) << '\n';//out 0
std::cout << *(ptr+1) << '\n';//out 1
std::cout << *(ptr+2) << '\n';//out 2
std::cout << *(ptr+3) << '\n';//out 3
}
【讨论】:
您不应将int[2][3] 称为“二维数组”,而应将其视为“数组数组”。它是一个包含两个项目的数组,其中每个项目本身就是一个包含 3 个整数的数组。
int (*p)[3] = a;
您可以使用p 指向a 中的两个项目之一。 p 指向一个三整数数组——即第一个这样的项目。 p+1 将指向第二个三整数数组。要初始化 p 以指向第二个元素,请使用:
int (*p)[3] = &(a[1]);
以下是指向这两项中的第一项的等效方法。
int (*p)[3] = a; // as before
int (*p)[3] = &(a[0]);
【讨论】:
[3]a 例如 :) 这是了解 C 中真正的数组的好方法。
int (*p)[65];??这是一个指针,还是 65 个指针?
严格来说,不,int (*p)[3] = a; 不是指向a 的指针。它是指向a 的第一个元素的指针。 a 的第一个元素是一个由三个整数组成的数组。 p 是一个指向三个整数数组的指针。
一个指向数组a的指针会这样声明:
int (*q)[2][3] = &a;
p 和q 的数值可能(甚至可能要求)相同,但它们属于不同类型。当您对p 或q 执行算术运算时,这将发挥作用。 p+1 指向数组a 的第二个元素,而q+1 指向刚好超出数组a 末尾的内存。
记住:cdecl 是你的朋友:int a[2][3]、int (*q)[2][3]。
【讨论】:
int a[2][3];
a 被读取为 int 数组 3 的数组 2,它只是一个数组数组。写的时候,
int (*p)[3] = a;
它将p 声明为指向数组的第一个元素的指针。所以,p 指向 3 个整数的数组,它是数组数组中的一个元素。
考虑这个例子:
int a[2][3]
+----+----+----+----+----+----+
| | | | | | |
+----+----+----+----+----+----+
\_____________/
|
|
|
p int (*p)[3]
这里,p 是指向 3 个整数数组的指针,它是数组数组的一个元素。
【讨论】:
[3] 是类型的一部分。在这种情况下,p 是一个指向大小为 3 的数组的指针,该数组包含整数。
数组的特定类型总是包括它的大小,所以你有 int *[3] 或 int *[5] 类型,但不只是 int *[] 有未定义的大小。
int *x[20]; /* type of x is int *[20], not just int *[] */
int y[10][10]; /* type of y is int[10][10], not just int[][] */
【讨论】:
p 只是一个指向 3 个整数数组的指针。它不知道a 的第一个维度是2,因为它被分配给a 的第一个元素,这正是int[3] 的类型。