须弥芥子 发表于 2022-9-12 19:52:05

疑问:数组地址强制转换为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:}

人造人 发表于 2022-9-12 20:36:38

int (*p) = (int (*))&array等效为int p = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 吗?
什么?

多维数组的本质就是数组指针?
就是数组中存储数组

决定这个数组指针的跨度,从而实现第一个下标对所谓数组内的数组的索引?
什么?

gandixiwang 发表于 2022-9-12 21:01:24

嗯,数组和指针是两个概念,要区分开来,本质还是不同的,虽然使用它们的方式都差不多

须弥芥子 发表于 2022-9-12 21:09:40

人造人 发表于 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 21:40:54

本帖最后由 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)
   

gandixiwang 发表于 2022-9-12 21:59:56

还能这样写
#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
*/
虽然没什么用

须弥芥子 发表于 2022-9-12 23:19:45

gandixiwang 发表于 2022-9-12 21:59
还能这样写

虽然没什么用

懂了,感谢{:10_254:}
页: [1]
查看完整版本: 疑问:数组地址强制转换为int (*)[3]类型