1613551 发表于 2022-5-13 16:41:13

数组指针和二维数组的问题2

小甲鱼说的这个原理我看懂了,但是我没完全懂这里面各个符号所代表的意义,第六行程序,int (*p) = (int (*))&array;按照从左到右的优先级,是先定义为指针,然后指向带有三个元素的数组,而后面的array是指向带有9个元素的数组,怎么就分成3*3了?

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

FengYue20 发表于 2022-5-13 16:56:31

这句话最主要的是int (*p) = (int (*))&array最主要的是(int (*)),使用了强制转换然后将数组的9个元素强转为3*3的二维数组

1613551 发表于 2022-5-13 17:04:28

FengYue20 发表于 2022-5-13 16:56
这句话最主要的是int (*p) = (int (*))&array最主要的是(int (*)),使用了强制转换然后将数组的9 ...

对,我迷惑的就是这个,我不明白其中的转换原理,我不能(int (*))是怎么把后面的数组给转换成3*3的

1613551 发表于 2022-5-13 20:58:13

{:10_266:}没人了吗?没人讲解一下为啥吗

风车呼呼呼 发表于 2022-5-13 22:05:38

指针的值永远都是地址,所谓 类型 只是告知编译器从 此地址开始往后要读多少字节的内容,已什么样的形式解读罢了。实际内存中满是0和1的二进制码
数组那片内存的数据从来就没有改变,强制转换只是改变了解读它的方式。

1613551 发表于 2022-5-14 15:32:06

风车呼呼呼 发表于 2022-5-13 22:05
指针的值永远都是地址,所谓 类型 只是告知编译器从 此地址开始往后要读多少字节的内容,已什么样的形式解 ...

{:10_266:}谢谢老哥了,虽然这不是我想问的,但是好像其他人都不知道了

1613551 发表于 2022-5-14 15:36:46

风车呼呼呼 发表于 2022-5-13 22:05
指针的值永远都是地址,所谓 类型 只是告知编译器从 此地址开始往后要读多少字节的内容,已什么样的形式解 ...

我现在大概是看懂了
页: [1]
查看完整版本: 数组指针和二维数组的问题2