sizeof()
注意要用%zd不然有错误!!!!!!!
1.sizeof()是运算符,不是函数名。它获取变量和数据类型所占内存大小(字节数)一般格式为sizeof(表达式或数据类型名)
int main()
{
char c1 = 'A', c2 = '%', c3 = '5';
printf("length1 is %zd\n", sizeof(c1)); //括号里面是数据类型名
printf("length1 is %zd\n", sizeof(c1+c2)); //括号里面是表达式
printf("length1 is %zd\n", sizeof(c1+c2+c3));
return 0;
}
//结果
//length1 is 1
//length1 is 4 验证了精度低于等于int型的算术运算结果为int型
//length1 is 4
2.其实 sizeof 也可以计算数组的大小
int main()
{
int arr[10] = { 0 };
printf("%zd\n", sizeof(arr)); //结果为40 4*10=40
return 0;
}
3.sizeof()求 数组元素个数
int main()
{
int arr[10] = { 0 };
printf("%zd\n", sizeof(arr)); //40
printf("%zd\n", sizeof(arr[0])); //4
printf("%zd\n", sizeof(arr)/sizeof(arr[0])); //元素个数为10
return 0;
}
//注意要用%zd不然有错误
4、sizeof特殊之处
在本例中,
1、通过输出字符变量加运算(c1+c2)结果字节数为4,验证了精度低于等于int型量的算数运算结果为int型
2、当int型的数赋值给short型,会被截断,所以大小结果还是short的2个字节
5sizeof与数组
这里是因为,数组在传参的时候变成了指针,所以,sizeof求的是指针的字节大小,而指针字节大小只与平台有关(x86下是4字节,x64下是8字节)
6.sizeof()求字符串长度 时 sizeof 会加上末尾的’\0’ ,导致长度数多了1
int main()
{
char a[] = { "abcdef" };
char b[] = { 'a','b','c','d','e','f','\0' };
char c[] = { 'a','b','c','d','e','f' };
printf("%zd\n", sizeof(a)); //7
printf("%zd\n", sizeof(b)); //7
printf("%zd\n", sizeof(c)); //6
return 0;
}
7、这里对比一下strlen()
注意使用时strlen时要包括头文件#include<string.h>
测字符串长度的函数,也用%zd
int main()
{
char a[20] = "hello world";
printf("%zd", strlen(a)); //11 空格也算一个字符
return 0;
}
结果为11,空格也算一个字符
可以看出strlen函数并没加上‘\0’,它计算出的是字符串真实的长度