c/c++语言开发共享取消引用指向整个数组的指针

我正在学习用C指向(整个)数组的指针。

假设我声明了一个2d的整数矩阵:

int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 

现在,我声明一个适当类型的指针:

 int (*ptr)[3][3]; 

初始化它:

 ptr = &arr; 

现在,ptr包含arr的地址。

  ptr --->&(arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2] arr[2][0] arr[2][1] arr[2][2]) 

那么,当我们取消引用ptr时,它应该产生第一个位置,不是吗?

printf("%d", *ptr)在编译时出错。 要打印第一个元素,我要使用***ptr

我有两个问题:

     printf(*ptr); 

    是错误的,因为printf的第一个参数需要是一个字符串,它指定用于打印其余参数的格式。 要打印地址,请使用:

     printf("%p", *ptr); 

    我无法理解三重解除引用的必要性。

    p的类型是int (*)[3][3]

    *p的类型是int [3][3]

    **p的类型是int [3]

    ***p的类型是int

    当你有这样的指针时,最好使用数组语法。

     (*p)[0][0] 

    通用表格将是:

     (*p)[i][j] 

    这比使用***p更容易混淆。 此外, ***p只能用于访问数组的[0][0]-th元素。

    如果*ptr没有指向数组的第一个元素,它指向什么?

    希望上一个问题的答案解释了这一点。

      以上就是c/c++开发分享取消引用指向整个数组的指针相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519497.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐