声明:本文所有代码均在VS2013下win32平台用C语言测试
首先sizeof是运算符,其值在编译的时候就计算好了且sizeof里面的运算结果不生效,即
#include <stdio.h>
int main()
{
int a = 0;
printf("%d\n", sizeof(a++));
printf("%d\n", a);
return 0;
}
输入结果为 4 0
sizeof(a++)表示一个int的字节数为4,而sizeof里面的a++并不生效,a依旧是0
sizeof的参数可以是指针,数组,结构体,函数等等
而strlen则是头文件string.h里面的函数,参数必须为char *且以'\0'结尾,遇到其他非法类型编译器会报warning
下面可以通过几组测试代码看一看sizeof以及strlen的用法区别等。备注即为结果
#include <stdio.h>
#include <string.h>
int main()
{
char *name = "abcdef";
printf("%d\n", sizeof(name[0]));//1
printf("%d\n", sizeof(&name));//4
printf("%d\n", sizeof(*name));//1
printf("%d\n", sizeof(&name + 1));//4
printf("%d\n", sizeof(name + 1));//4
printf("%d\n", sizeof(name));//4
printf("%d\n", strlen(name));//6
printf("%d\n", strlen(name + 1));//5
printf("%d\n", strlen(&name));//随机值3
printf("%d\n", strlen(&name + 1));//随机值4
getchar();
return 0;
}
将char *name = "abcdef" 改为char name[] = "abcdef"
#include <stdio.h>
#include <string.h>
int main()
{
char name[] = "abcdef";
printf("%d\n", sizeof(name[0]));//1
printf("%d\n", sizeof(&name));//4
printf("%d\n", sizeof(*name));//1
printf("%d\n", sizeof(&name + 1));//4
printf("%d\n", sizeof(name + 1));//4
printf("%d\n", sizeof(name));//7
printf("%d\n", strlen(name));//6
printf("%d\n", strlen(name + 1));//5
printf("%d\n", strlen(&name));//6
printf("%d\n", strlen(&name + 1));//随机值12
getchar();
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
int a[] = { 1, 2, 3, 4 };
printf("%d\n", sizeof(a));//4*4=16
printf("%d\n", sizeof(a + 0));//4
printf("%d\n", sizeof(*a));//4
printf("%d\n", sizeof(a + 1));//4
printf("%d\n", sizeof(a[1]));//4
printf("%d\n", sizeof(&a));//4
printf("%d\n", sizeof(&a + 1));//4
printf("%d\n", sizeof(&a[0]));//4
printf("%d\n", sizeof(&a[0] + 1));//4
printf("%d\n", sizeof(*&a));//16
getchar();
return 0;
}