我偶尔在网上遇到过sizeof(str -1)但从未使用过它。我很好奇sizeof(str-1)和sizeof(str)-1之间有什么区别,其中str是字符数组,表示char str [] =“Hello”;
答案 0 :(得分:9)
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
不评估其操作数,因此这不是问题。
答案 1 :(得分:5)
(根据64位编译时的调试情况),这是一个很大的区别。
int main( void )
{
char str[] = "Hello";
sizeof( str-1 ); //gives 8
strSize = sizeof( str ) - 1; //gives 5
}
第一个实例是给出指针的大小,因为参数是指针算术的结果,第二个给出了字符串的大小,少了一个。
(指针的大小可能会有所不同。:-))