sizeof(str -1)和sizeof(str)-1之间的区别?

akn*_*azi 2 c c++ sizeof

我在网上偶然遇到过sizeof(str -1)但从未使用过它.我很好奇sizeof(str-1)和sizeof(str)-1之间的区别是什么,str是字符数组,表示char str [] ="Hello";

Ste*_*sop 9

sizeof(str)是数组的大小str.在这种情况下,那是6(包括nul终结符).所以sizeof(str)-1是5(它排除了nul终结符).

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

另外,计算str-1是未定义的行为.方便地sizeof不评估其操作数,因此这不是问题.


Gri*_*ner 5

(根据64位编译时的调试),这是一个很大的区别.

int main( void ) 
{
    char str[] = "Hello";

    sizeof( str-1 ); //gives 8
    strSize = sizeof( str ) - 1; //gives 5
}
Run Code Online (Sandbox Code Playgroud)

第一个实例是给出指针的大小,因为参数是指针算术的结果,第二个给出字符串的大小,少于一个.

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