c/c++语言开发共享指针指针和指向2d数组的指针之间的区别


    解释为什么你可能会看到15 。 (C标准没有对此进行定义,但无论如何你的编译器都会向前推进)。 可能你的编译器将该行视为

     int **f = (int **)B; 

    然后表达式*f将从B的存储(实际上保持int )读取字节并假装那些是构成指针表示的字节。 这是进一步未定义的行为(违反严格别名规则)。 可能结果是*f是指向地址0x00000001的指针。

    然后使用%d打印指针,导致进一步的未定义行为。 您看到1因为您的系统使用相同的方法将int传递给printf就像传递int *

    当你将(int *)0x00000001加1时,得到(int *)0x00000005 ,因为递增指针意味着指向该类型的下一个元素。

    当您取消引用此指针时,它会导致段错误,因为该地址超出了您的有效地址空间。

    1) int **p = bint (*p)[3] = b ? – 编号int **p = b是错误。

    因为这里int **p是指向整数的指针,但是int (*p)[3]是指向3个整数数组的指针!

    2) int **f = B; 这是一个错误,可能导致未定义的行为!

    3) printf("%d ",**f); – 与(2)相同。 int **f = B; 是错误,所以未定义的行为!

    注意:为避免此类错误,请在编译器选项中启用一些警告标志并尝试!

      以上就是c/c++开发分享指针指针和指向2d数组的指针之间的区别相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐