1. sizeof和strlen的对比
1.1 sizeof
在学习操作符的时候,我们学习了
sizeof
,
sizeof 是一个单目操作符, 绝对不是函数!!!sizeof 计算变量所占内存内存空间⼤⼩的,单位是字节。
如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。
sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。
比如:
#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a);
printf("%d\n", sizeof(int));
return 0;
}
运行结果:
1.2 strlen
strlen 是C语⾔库函数,功能是求字符串⻓度。函数原型如下:
size_t strlen ( const char * str );//size_t是一种无符号整数类型,专门给strlen用的类型
统计的是从
strlen
函数的参数
str
中这个地址开始向后,
\0
之前字符串中字符的个数。
strlen
函数会⼀直向后找
\0
字符,直到找到为⽌,所以可能存在越界查找。
代码:
#include <stdio.h>
#include <string.h>
int main()
{
size_t len = strlen("abcdef");
printf("%zd\n", len);
return 0;
}
运行结果:
1.2.1 图解
代码:
#include <stdio.h>
#include <string.h>
int main()
{
size_t len = strlen("abc\0def");
printf("%zd\n", len);
return 0;
}
运行结果:
1.2.2 图解
代码:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = { 'a','b','c' };
printf("%zd", strlen(arr));
return 0;
}
运行结果:
1.2.3 图解
注意:zizeof 括号中有表达式的话,表达式是不参与计算的!!!
举例:
#include <stdio.h>
int main()
{
int a = 10;
short b = 20;
printf("%d\n", sizeof(a = b + 10));
printf("%d\n", a);
return 0;
}
运行结果: