【问题标题】:Difference between sizeof(str -1) and sizeof(str) -1?sizeof(str -1) 和 sizeof(str) -1 的区别?
【发布时间】:2012-03-27 10:35:47
【问题描述】:

我在网上遇到过 sizeof(str -1) 几次,但我自己从未使用过。我只是好奇 sizeof(str-1) 和 sizeof(str) -1 有什么区别,其中 str 是字符数组say char str[] = "Hello";

【问题讨论】:

    标签: c++ c sizeof


    【解决方案1】:

    sizeof(str) 是数组str 的大小。在本例中,为 6(包括 nul 终止符)。所以sizeof(str)-1 是 5(它不包括 nul 终止符)。

    str-1 在 C 中具有 char* 类型,在 C++ 中具有 const char* 类型,因为数组到指针的衰减。所以sizeof(str-1) 是指向字符的指针的大小。它与用于定义str 的特定字符串的长度无关。

    顺便说一句,计算str-1 是未定义的行为。方便sizeof 不评估它的操作数,所以这不是问题。

    【讨论】:

      【解决方案2】:

      (根据编译为64位时调试)差别很大。

      int main( void ) 
      {
          char str[] = "Hello";
      
          sizeof( str-1 ); //gives 8
          strSize = sizeof( str ) - 1; //gives 5
      }
      

      第一个实例给出指针的大小,因为参数是指针运算的结果,第二个给出字符串的大小,减去一个。

      (您的指针大小可能会有所不同。:-))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 2021-12-08
        • 2015-07-17
        • 1970-01-01
        • 2021-07-23
        • 2019-03-19
        • 1970-01-01
        相关资源
        最近更新 更多