岳阳网站制作公司,wordpress 如何备份数据库,小榄网站建设推广,今天福州发生的重大新闻sizeof和strlen有什么区别#xff1f; sizeof本质是运算符#xff08;sizoof既是关键字也是运算符#xff0c;不是函数哈#xff09;#xff0c;而strlen就是函数。sizeof后面如果是类型#xff0c;则必须加括号#xff0c;如果是变量#xff0c;可以不加括号。 sizeof…sizeof和strlen有什么区别 sizeof本质是运算符sizoof既是关键字也是运算符不是函数哈而strlen就是函数。sizeof后面如果是类型则必须加括号如果是变量可以不加括号。 sizeof运算符的结果类型是size_t它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大小。 sizeof可以用类型作为参数而strlen只能用char * 作为参数而且必须是以\0结尾的。sizeof还可以以函数作为参数如int test()则sizeof(test())的值等于sizeof(int)的值在32位计算机下该值为4。 大部分编译程序的sizeof都是在编译的时候计算的所以可以通过sizeof(x) 来定义数组维数通常用来计算占用内存大小。而strlen则是在运行阶段计算的用来计算字符产的实际长度。 如 char str[20] “0123456789”,字符数组str是编译期大小已经固定的数组在32位计算机下sizeof(str) 20,而strlen是在运行期计算的大小strlen(str) 10。 思考
不使用sizeof怎么求int占用的字节数
#define my_sizeof(value) (char *)(value 1) - (char *)(value)value 表示获取变量 value 的地址。(char )(value 1) 表示获取变量 value 后面一个元素的地址通过将其强制转换为 char 类型来确保以字节为单位进行计算。最后用 (char *)(value 1) - (char *)(value) 来计算两个地址之间的差值得到变量 value 的大小。
这个宏定义是一种快速获取变量大小的方法但在某些特殊情况下可能会有限制。如包含了 padding 的结构体、指向函数的指针等可能会导致计算结果不准确。
Tips: size_t 是 C 和 C 中用于表示内存大小和对象大小的无符号整数类型在处理内存和数组相关的操作时非常重要。 sizeof 运算符在编译时求值而不是运行时。它的结果在编译时就确定了不会因为变量的具体取值而改变。此外sizeof 运算符不能用于动态分配的内存或函数类型。 在 32 位计算机上指针类型的大小通常为 4 字节32 位。这是因为 32 位的寻址范围为 2^32即 4GB因此一个指针占据 4 字节的内存空间来存储一个地址。 而在 64 位计算机上指针类型的大小通常为 8 字节64 位。这是因为 64 位的寻址范围为 2^64即非常大需要 8 个字节来存储一个地址。