假设我有一个二维数组 int m[3][4] 如果 typedef 定义为
typedef int array[4];
array *ptr = m;
这是什么意思?它是指向 4 个元素的数组的指针吗?还是4个指针的数组?
当我们cout << ptr or cout << *ptr
,它打印相同的地址。这怎么可能?
假设我有一个二维数组 int m[3][4] 如果 typedef 定义为
typedef int array[4];
array *ptr = m;
这是什么意思?它是指向 4 个元素的数组的指针吗?还是4个指针的数组?
当我们cout << ptr or cout << *ptr
,它打印相同的地址。这怎么可能?
ptr 是指向四个 int 类型元素的数组的指针。m 是一个由 3 个类型元素组成的数组(由四个 int 类型元素组成的数组)。给你一张图片 - m 是一个由 3 个数组类型元素组成的数组。这就是 ptr 初始化为 m 的原因 - 没有问题,因为作为数组的“m”被隐式转换为指向该数组中第一个元素的指针。
ptr 是指向元素数组的指针。所以该指针被打印出来。当使用 *ptr 时——你得到一个数组,它再次隐式转换为指向数组第一个元素的指针,这又是相同的起点——所以你得到相同的值。
由于一切都从同一点开始,您将获得相同的价值。当一个人在指针上做 ++ 时,事情就会开始区分。我会把它留给你。
查看顺时针/螺旋规则。读完这篇文章后,您可以将声明视为指向 type-aliasarray
的指针,换句话说,是指向四个整数数组的指针。
根据“顺时针/螺旋规则” ptr 是指向 4 int 数组的指针。