【发布时间】:2012-03-27 10:35:47
【问题描述】:
我在网上遇到过 sizeof(str -1) 几次,但我自己从未使用过。我只是好奇 sizeof(str-1) 和 sizeof(str) -1 有什么区别,其中 str 是字符数组say char str[] = "Hello";
【问题讨论】:
我在网上遇到过 sizeof(str -1) 几次,但我自己从未使用过。我只是好奇 sizeof(str-1) 和 sizeof(str) -1 有什么区别,其中 str 是字符数组say char str[] = "Hello";
【问题讨论】:
sizeof(str) 是数组str 的大小。在本例中,为 6(包括 nul 终止符)。所以sizeof(str)-1 是 5(它不包括 nul 终止符)。
str-1 在 C 中具有 char* 类型,在 C++ 中具有 const char* 类型,因为数组到指针的衰减。所以sizeof(str-1) 是指向字符的指针的大小。它与用于定义str 的特定字符串的长度无关。
顺便说一句,计算str-1 是未定义的行为。方便sizeof 不评估它的操作数,所以这不是问题。
【讨论】:
(根据编译为64位时调试)差别很大。
int main( void )
{
char str[] = "Hello";
sizeof( str-1 ); //gives 8
strSize = sizeof( str ) - 1; //gives 5
}
第一个实例给出指针的大小,因为参数是指针运算的结果,第二个给出字符串的大小,减去一个。
(您的指针大小可能会有所不同。:-))
【讨论】: