wyxnogiveup 发表于 2022-12-6 17:24:00

带你学C带你飞p24第五题

#include <stdio.h>

int main()
{
      int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      int (*p) = (int (*))&array;   

      printf("%d\n", p);

      return 0;
}
我想问一下大佬们,(int(*))&array,答案里这样解释:等号右边强制将 array 这个一位数组重新划分成 3 * 3 的二维数组
请问如何理解?我不知道这是如何划分成二维数组的,能麻烦大佬详细解释一下吗?

还有一个问题,如果说划分成了3*3二维数组,那么定义int(*p),p指向的是一个有三个元素的数组,也就是说,每一个元素都是一个一维数组。那么为何数组指针定义的时候用的是int?定义数组指针时int代表了数组元素的类型。但一维数组相当于首元素地址,那么元素类型就是地址而不是整型啊。能请大佬解释一下吗?

小甲鱼 发表于 2022-12-17 04:44:34

我想问一下大佬们,(int(*))&array,答案里这样解释:等号右边强制将 array 这个一位数组重新划分成 3 * 3 的二维数组
请问如何理解?我不知道这是如何划分成二维数组的,能麻烦大佬详细解释一下吗?
答:因为 array 是一共有 9 个元素,如果是 6 个元素,那么这里就是划分为 2 * 3,因为后面的 3 是确定的~

如果说划分成了3*3二维数组,那么定义int(*p),p指向的是一个有三个元素的数组,也就是说,每一个元素都是一个一维数组。那么为何数组指针定义的时候用的是int?
答:它这里指定的是每一个数组元素的类型。

但一维数组相当于首元素地址,那么元素类型就是地址而不是整型啊。能请大佬解释一下吗?
答:地址是没有类型的,只有数组元素才有类型哈~
页: [1]
查看完整版本: 带你学C带你飞p24第五题