sizeof在c语言中是什么意思偏移量是什么(C语言学习笔记—sizeof关键字和strlen函数)
sizeof和strlen在C语言中常用来计算字符大小和长度 ,在应用中却有着本质的区别 。
sizeof是C语言中的关键字 ,其作用是返回一个对象或类型所占的内存字节数 。使用方式为:
strlen() 函数从字符串的开头位置依次向后计数 ,直到遇见\0 ,然后返回计时器的值 。最终统计的字符串长度不包括\0 。使用方式为:
上述为sizeof关键字和strlen函数的基本用法 ,在实际应用或面试中 ,应多注意两者区别:
1 、sizeof关键字在编译时期就已经确定 ,stelen函数在运行时期确定 。
上述代码运行结果为4 ,1 。因为sizeof是关键字 ,所以在第一行输出时a++不会运行 ,括号内的参数并不会参与计算 。这也正证实sizeof关键字在编译时期已经确定 ,系统认为是常数 。
其实上述代码也可作为分辨关键字和函数的区别 ,当然用指针取址的方法也可分别关键字和函数的区别 。
这行代码会运行错误,如果sizeof为函数 ,则指针可指向sizeof的地址 ,但因为是关键字,取址会导致编译错误 。
2 、sizeof和strlen的结束符占有大小不同 。
strlen是计算字符串的长度 ,在C/C++中字符串以“\0 ”结尾 。
sizeof计算操作数的存储大小 ,“\0 ”占两字节。
3 、strlen返回值为size_t,为无符号整型 。
上述代表运行结果为“字符串b比 字符串a 长 ” ,导致这个输出结果的原因为size_t为无符号整型 ,所以strlen(b)结果为大于0的数 ,strlen(a)结果为大于0的数 ,两个size_t相减也为size_t类型 ,结果也一定大于0.
4 、strlen()定义字符串数组时 ,一定要初始化 。
上述看到strlen计算出的结果是77 ,显示是错误的
原因:test字符串在定义时未初始化 ,test字符串在定义时 ,拿到一片内存 ,此时这片内存里面可能储存有值,导致使用strlen计算test字符串时找不到字符串结束标志 ’\0‘ ,而会在test申请的那片内存后面一直找下去 ,找到 ’\0‘ 后输出,计算的结果 ,此时输出的结果肯定错误的结果。
以上为网上资料和个人的一些理解 ,如有错误 ,请指正 。
资料出处
https://blog.csdn.net/qq_45809384/article/details/124705939
https://blog.csdn.net/u013812502/article/details/81198452
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!