youxixingzhet 发表于 2022-2-17 10:24:44

数组指针的问题

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

这两句的意思是什么啊?哪位大神讲解一下。
我的理解:
(int (*))&array这句话是将array这个数组的首地址变成一个指向三个数组的指针
再将array这个地址赋值给p,那么左右两边不就表示的是同一个数组指针了。
{:5_100:} {:5_100:} {:5_100:} {:5_100:}

jhq999 发表于 2022-2-17 10:58:51

本帖最后由 jhq999 于 2022-2-17 11:04 编辑

p是一维是3的二维数组的int类型的指针,array是一维数组int类型的指针,它们和&array的值是一样的,类型不同是给编译器看的,所以值虽然相同为了让编译器看懂一定要按编译器规矩来写,要不然编译器看不懂就通不过编译

youxixingzhet 发表于 2022-2-17 11:36:36

jhq999 发表于 2022-2-17 10:58
p是一维是3的二维数组的int类型的指针,array是一维数组int类型的指针,它们和&array的值是一样的,类型不 ...

数组指针首地址赋值给数组指针 形成的二维数组嘛??

jhq999 发表于 2022-2-17 12:45:47

youxixingzhet 发表于 2022-2-17 11:36
数组指针首地址赋值给数组指针 形成的二维数组嘛??

可以这么理解,等你学完c,了解一下汇编里的循环就知道了

youxixingzhet 发表于 2022-2-17 14:18:36

jhq999 发表于 2022-2-17 12:45
可以这么理解,等你学完c,了解一下汇编里的循环就知道了

谢谢大佬

youxixingzhet 发表于 2022-2-17 14:25:52

jhq999 发表于 2022-2-17 12:45
可以这么理解,等你学完c,了解一下汇编里的循环就知道了

大佬 我还有一个问题想问一下
(int (*))&array 这句话的意思是把&array这个数值定义成一个含有三个元素的数组的指针吗?
然后再把 &array这个数值赋值给指针P对不???

jhq999 发表于 2022-2-17 14:50:51

youxixingzhet 发表于 2022-2-17 14:25
大佬 我还有一个问题想问一下
(int (*))&array 这句话的意思是把&array这个数值定义成一个含有三个元 ...

可以这么说,但我认为
&array这个数值强制转换成一个一维含有三个元素的二维数组的指针

youxixingzhet 发表于 2022-2-17 15:06:01

jhq999 发表于 2022-2-17 14:50
可以这么说,但我认为
&array这个数值强制转换成一个一维含有三个元素的二维数组的指针

大佬,乍一看确实感觉可以是一个二维数组
但是 仔细推敲我还是不明白为什么创建了一个一位数组再将它的起始地址强制转换为int(*)型再赋值给int(*p)就成为二维数组了
你看哈 :&array这个数值就是array数组的起始地址 然后定义成一个含有三个元素的数组指针 此时array的地址就是这个数组指针的地址 再把array这个指针赋值给p 那不应该p指针和array指针地址相同嘛?

jhq999 发表于 2022-2-17 17:59:15

youxixingzhet 发表于 2022-2-17 15:06
大佬,乍一看确实感觉可以是一个二维数组
但是 仔细推敲我还是不明白为什么创建了一个一位数组再将它的 ...

没错,地址相同,内容也相同,一个是用二维数组表达出来,一个是用一维数组表达出来

页: [1]
查看完整版本: 数组指针的问题