2

假设我有一个二维数组 int m[3][4] 如果 typedef 定义为

typedef int array[4];
array *ptr = m;

这是什么意思?它是指向 4 个元素的数组的指针吗?还是4个指针的数组?

当我们cout << ptr or cout << *ptr,它打印相同的地址。这怎么可能?

4

3 回答 3

0

ptr 是指向四个 int 类型元素的数组的指针。m 是一个由 3 个类型元素组成的数组(由四个 int 类型元素组成的数组)。给你一张图片 - m 是一个由 3 个数组类型元素组成的数组。这就是 ptr 初始化为 m 的原因 - 没有问题,因为作为数组的“m”被隐式转换为指向该数组中第一个元素的指针。

ptr 是指向元素数组的指针。所以该指针被打印出来。当使用 *ptr 时——你得到一个数组,它再次隐式转换为指向数组第一个元素的指针,这又是相同的起点——所以你得到相同的值。

由于一切都从同一点开始,您将获得相同的价值。当一个人在指针上做 ++ 时,事情就会开始区分。我会把它留给你。

于 2012-12-04T06:49:40.173 回答
0

查看顺时针/螺旋规则。读完这篇文章后,您可以将声明视为指向 type-aliasarray的指针,换句话说,是指向四个整数数组的指针。

于 2012-12-04T06:58:46.030 回答
0

根据“顺时针/螺旋规则” ptr 是指向 4 int 数组的指针。

于 2012-12-04T11:36:05.170 回答