指针格式的一个问题

code配上格子衫 2019-11-03 08:03:59
int (*parr[10])[5] 想知道它的格式是什么 内存中怎么存 以及使用时候如何看待与使用 谢谢各位大佬了
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
pro_or_check 2019-11-05
  • 打赏
  • 举报
回复
我说的不知道对不对, 指向int[10]的指针,有5个这样的指针。 如果是这个意思,可以用typedef分两次定义。 typedef int *[10] array10 typedef array10[5] array5
bsnow 2019-11-05
  • 打赏
  • 举报
回复
打印的结果 OB[0][0][0] = 1 OB[0][0][1] = 1 OB[0][1][0] = 2 OB[0][1][1] = 2 OB[1][0][0] = 3 OB[1][0][1] = 3 OB[1][1][0] = 4 OB[1][1][1] = 4 OB[2][0][0] = 5 OB[2][0][1] = 5 OB[2][1][0] = 6 OB[2][1][1] = 6
bsnow 2019-11-05
  • 打赏
  • 举报
回复
想知道它的格式是什么 答: 我不太明白你指的格式是什么意思?是类型还是说存储的是什么东西? 如果是类型,下面讲用法的时候你应该能明白, 如果是存储的是什么东西,我只能说它存储是指针,大小是10个指向二维数组的指针。(其实就是三维数组) 内存中怎么存 答: 看看例子你能明白。

    int ob[3][2][2] = {
            {{1,1},{2,2}},
            {{3,3},{4,4}},
            {{5,5},{6,6}}
    };

    int (* parr[3])[2];

    for(int i = 0;i < 3; i ++)
    {
        parr[i] = ob[i];
    }

    for(int i = 0; i < 3; i ++)
    {
        for(int j = 0; j < 2; j ++)
        {
            for(int z = 0; z < 2; z++)
            {
                printf("OB[%d][%d][%d] = %d\r\n", i,j,z,parr[i][j][z]);
            }
        }
    }
自信男孩 2019-11-04
  • 打赏
  • 举报
回复
指针就是一个sizeof(long)长度的内存空间。它里面存放的是地址,即指向列数是5的二维数组的地址。
内存就是存地址。它的使用和二维数组的使用一样~
六道佩恩 2019-11-04
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay 的回复:
如果加括号的话,也应该是int (*parr)[10][5],因为同样作为[],不存在优先级差别的,只存在前后的次序,所以没必要加括号。对于*parr[]这样的形式,应该这么理解,这是一个数组,就像其它的数组一样访问,只不过它的每个元素都是指针。然后回到楼主的问题,这个数组怎么存储,它还是个数组,二维数组,只是它的每个元素都是指针。在存储空间方面,32位应用里面实际上跟int arr[10][5];没区别,因为指针实际上就是一个32位整数,区别只是这个整数不是任意的一个整数,而是一个应用运行访问的一个内存位置。就好比,一条街一条路,比如中山路最大只有600号的门牌号,你去访问中山路800号,根本就是无效的。指针就是一个地址,跟我们所处的地址是类似的。再说回数组,它这个指针所指向的内存是什么样,这取决于当时程序运行的状态,它可能不指向任何内存,就是NULL,也可能指向一个单元的内存,就是一个变量int,也可能指向一块连续的内存区域,就像数组一样。并且parr这个数组里面各个指针元素所指向的内存区域之间并不存在某种联系,它们只是可以统一通过parr来管理而已
加括号是一个指向二维数组的指针,不加括号是一个元素为指针变量的二维数组
铖邑 2019-11-03
  • 打赏
  • 举报
回复
如果加括号的话,也应该是int (*parr)[10][5],因为同样作为[],不存在优先级差别的,只存在前后的次序,所以没必要加括号。对于*parr[]这样的形式,应该这么理解,这是一个数组,就像其它的数组一样访问,只不过它的每个元素都是指针。然后回到楼主的问题,这个数组怎么存储,它还是个数组,二维数组,只是它的每个元素都是指针。在存储空间方面,32位应用里面实际上跟int arr[10][5];没区别,因为指针实际上就是一个32位整数,区别只是这个整数不是任意的一个整数,而是一个应用运行访问的一个内存位置。就好比,一条街一条路,比如中山路最大只有600号的门牌号,你去访问中山路800号,根本就是无效的。指针就是一个地址,跟我们所处的地址是类似的。再说回数组,它这个指针所指向的内存是什么样,这取决于当时程序运行的状态,它可能不指向任何内存,就是NULL,也可能指向一个单元的内存,就是一个变量int,也可能指向一块连续的内存区域,就像数组一样。并且parr这个数组里面各个指针元素所指向的内存区域之间并不存在某种联系,它们只是可以统一通过parr来管理而已

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧