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

时间:2012-03-27 10:35:48

标签: c++ c sizeof

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

2 个答案:

答案 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
}

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

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