最后的魁拔 发表于 2020-2-3 12:51:45

请问这个是如何重新划分的

#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;
}

解释:等号右边强制将 array 这个一位数组重新划分成 3 * 3 的二维数组,然后用数组指针指向它
如何看出来划分成3*3的二位数组的
麻烦大佬解释一下



Aseeker 发表于 2020-2-3 15:47:12

array本身是一个一维数组的首地址,&array就相当于是二维数组的首地址

(int(*))是强制转化为3列的二维数组

转换之后 因为原本一维数组有9个数据,所以是array

最后的魁拔 发表于 2020-2-3 15:52:33

(int(*))是强制转化为3列的二维数组
请问这个是咋强制转换的

Aseeker 发表于 2020-2-3 16:02:55

最后的魁拔 发表于 2020-2-3 15:52
(int(*))是强制转化为3列的二维数组
请问这个是咋强制转换的

因为原本就是一维数组的首地址,强制转化之后就是3列二维数组的首地址,转化系统会自动进行的
然后把这个二维数组首地址赋给 int(*p) 这个3列二维数组 的p

最后的魁拔 发表于 2020-2-3 16:07:05

Aseeker 发表于 2020-2-3 16:02
因为原本就是一维数组的首地址,强制转化之后就是3列二维数组的首地址,转化系统会自动进行的
然后把这 ...

我知道了,谢谢了,
页: [1]
查看完整版本: 请问这个是如何重新划分的