sizeof(str-1)和sizeof(str)-1之间的差异

Difference between sizeof(str -1) and sizeof(str) -1?

本文关键字:sizeof 之间 str str-1      更新时间:2023-10-16

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

sizeof(str)是数组str的大小。在这种情况下,这是6(包括nul终止符)。所以sizeof(str)-1是5(它不包括nul终止符)。

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

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

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

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

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

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