您的位置:首页 > 编程语言 > C语言/C++

sizeof 和 strlen的一些区别(用C语言代码表示)

2016-08-12 22:18 507 查看
声明:本文所有代码均在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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: