我在网上偶然发现了sizeof(str-1),但从来没有用过它。我只是很好奇sizeof(str-1)和sizeof(str)-1之间的区别是什么,其中str是字符数组说char str [] =“你好”;sizeof(str -1)和sizeof(str)-1之间的区别?
2
A
回答
9
sizeof(str)
是数组str
的大小。在这种情况下,这是6(包括nul结束符)。所以sizeof(str)-1
是5(它不包括nul终止符)。
str-1
在C中有char*
类型,在C++中有const char*
,这是因为数组到指针的衰减。所以sizeof(str-1)
是指向字符的指针的大小。它与用于定义str
的特定字符串的长度无关。
另外,计算str-1
是未定义的行为。方便sizeof
不评估其操作数,所以这不是一个问题。
5
(根据调试时编译为64位)这是一个很大的区别。
int main(void)
{
char str[] = "Hello";
sizeof(str-1); //gives 8
strSize = sizeof(str) - 1; //gives 5
}
的第一个实例是给指针的大小,因为自变量是指针运算的结果,第二给出了字符串的大小,少一个。
(指针的大小可能会有所不同。:-))
相关问题
- 1. str()和astype(str)之间的区别?
- 2. 在这种情况下char str [1]和char * str之间的区别?
- 3. str [0]和str.charAt(0)之间的区别
- 4. str和getpass输出之间的区别
- 5. char * str =“...”和char str [N] =“...”之间的区别?
- 6. CType(str,DateTime)和DateTime.Parse(str)之间的区别
- 7. Clojure中str和print-str之间的区别/关系
- 8. (const char * str),(char const * str)和(char * const str)之间有什么区别?
- 9. “?1”和“?”之间的区别
- 10. char str []和char * str有什么区别?
- 11. grep“str”有什么区别?和grep“str”*
- 12. if $ str =“”和if($ str)是否有区别?
- 13. list + = str和list + = str有什么区别,
- 14. 为什么的sizeof( “ - 2147483648”) - 1
- 15. sizeof(char *)和sizeof(char)的区别是什么?
- 16. 宏和函数中sizeof之间的区别
- 17. sizeof和.size()之间的区别为一个向量C++
- 18. String方法split(String str,int len)和split(String str)之间有什么区别?
- 19. '1' - >'1',如何将左str转换为右str
- 20. Javascript:Forloop i ++和(i + 1)之间的区别
- 21. .htaccess中$ 1 vs%1之间的区别
- 22. NSData的sizeof和长度的区别
- 23. python中str()和“”之间的区别是什么?
- 24. Python str(u'a')和u'a'.encode('utf-8')之间的区别是什么
- 25. C为什么sizeof('a')= 4且sizeof(char)= 1?
- 26. tp(,)和tpo之间的区别(1)()
- 27. TimerTask和Executors.newScheduledThreadPool之间的区别(1)
- 28. srand(1)和srand(0)之间的区别
- 29. ASP.NET MVC 1和3之间的区别
- 30. .MakeArrayType()和.MakeArrayType(1)之间的区别