sizeof(str-1)和sizeof(str)-1之间的差异
Difference between sizeof(str -1) and sizeof(str) -1?
我在网上遇到过几次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。
(指针的大小可能会有所不同。:-)
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- sizeof(空结构)和sizeof(带有空数组的结构)之间的区别?
- sizeof() 在 32 位和 64 位进程之间的行为不同
- 如何获取字符*的实际长度?strlen 和 sizeof(target)/sizeof(target*)之间的区别?
- sizeof(struct name_of_struct) vs sizeof(name_of_struct) 之间的区
- "new int[5]"和"malloc(5 * sizeof(int))"之间的C++有什么区别?
- Sizeof() 在 PC 和 Arduino 上的 C++ 之间的差异
- sizeof(str-1)和sizeof(str)-1之间的差异
- strlen()和sizeof()之间有一个奇怪的区别