c/c++语言开发共享为什么sizeof(指针)返回不正确的值?


可能重复:
Sizeof字符串文字

在我的windows7 mingw环境中,我试过这个:

char str[] = "hello"; 

sizeof(str)的值是6,而不是4或8。

怎么会发生这种情况?

    sizeof(str)返回字符串中包含终止空字符的字节数。 即, "hello"在您的数组中产生6个字节。

    相反,如果你有

     char* str = "hello"; 

    那么sizeof(str)将返回指针 str的字节数(对于32位系统,为4)。

    您可能会发现这个问题为什么sizeof会为C中的相同字符串返回不同的值? 出于兴趣。

    “sizeof()”运算符返回字节数。 对于您的字符串,它恰好是6(5个字符加上空字节)。 对于6个元素的整数数组,它是24(至少在我的32位Linux系统上)。 对于指针,它将是4(同样,对于32位系统)。

     #include  int main (int argc, char *argv[]) { char str[] = "Hello"; char *s = "Hello"; int a[] = {1, 2, 3, 4, 5, 6}; printf ("sizeof (str)=%d, sizeof(s)=%d, sizseof(a)=%dn", sizeof (str), sizeof(s), sizeof(a)); return 0; } 

    结果:

     sizeof (str)=6, sizeof(s)=4, sizeof(a)=24 

    这是因为str是一个chars数组。 sizeof(array)将告诉您数组占用的字节数,并且由于str是一个chars数组,因此每个元素只有1个字节,包括6个字节的空终止字符。

    您可以使用: sizeof(array)/sizeof(array[0])获取数组中的元素数,因此可以更明确地编写: sizeof(str)/sizeof(str[0]) ,但是如果str是一个char数组然后这相当于sizeof(str)

    请注意,这通常不适用于C字符串,对于字符串的长度,请使用strlen 。 例如:

     char *str = "hello"; sizeof(str); // returns 4, since str is declared as char*, not char[] 

      以上就是c/c++开发分享为什么sizeof(指针)返回不正确的值?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐