疑问:数组地址强制转换为int (*)[3]类型
本帖最后由 须弥芥子 于 2022-9-12 21:10 编辑#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;
//输出9
}
int (*p) = (int (*))&array等效为int p = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 吗?
多维数组的本质就是数组指针?
决定这个数组指针的跨度,从而实现第一个下标对所谓数组内的数组的索引?
不知道我理解的对不对,希望鱼油们跟帖,分享一下自己的理解{:10_256:} int (*p) = (int (*))&array等效为int p = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 吗?
什么?
多维数组的本质就是数组指针?
就是数组中存储数组
决定这个数组指针的跨度,从而实现第一个下标对所谓数组内的数组的索引?
什么?
嗯,数组和指针是两个概念,要区分开来,本质还是不同的,虽然使用它们的方式都差不多 人造人 发表于 2022-9-12 20:36
int (*p) = (int (*))&array等效为int p = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 吗?
什么?
...
不好意思,手机码字出错了#include <stdio.h>
int main()
{
int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p1) = (int (*))&array;
int p2 = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
printf("%d\n", p1);
printf("%d\n", p2);
return 0;
}
/*
9
9
Process finished with exit code 0
*/
我想问的是这个现象是怎么解释的。
我说的跨度指的是地址(指针)+1 实际加的值。 本帖最后由 gandixiwang 于 2022-9-12 22:04 编辑
须弥芥子 发表于 2022-9-12 21:09
不好意思,手机码字出错了
我想问的是这个现象是怎么解释的。
我说的跨度指的是地址(指针)+1 实际加 ...
就是想套娃一样,二维数组(指针) &p2 的跨度是整个二维数组,就是9个int的跨度 你写成这样 p2 就是在数组里选定了第三行进去里面,跨度是3个int,再写成这样p2就是选定第三行第三个数把这个地址的数给取出来,跨度是一个int,这样就选定了 9 这个数,把他们替换成这样也是可以的:p=*(*(p2+2)+2)
还能这样写
#include <stdio.h>
int main()
{
int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p1) = (int (*))&array;
int p2 = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
printf("%d\n", *(*(p1+2)+2));
printf("%d\n", *(p1+2));
printf("%d\n", *(*(*(&p2+1))-1));
printf("%d\n", (&p2)[-1]);
return 0;
}
/*
9
9
9
9
Process finished with exit code 0
*/
虽然没什么用 gandixiwang 发表于 2022-9-12 21:59
还能这样写
虽然没什么用
懂了,感谢{:10_254:}
页:
[1]