sizeof和strlen超详细讲解,看完一定有所收获

首先我们先来看strlen和sizeof的区别
strlen:是计算字符个数,不包括’\0’
sizeof:计算所占内存空间,包含’\0’

#include<stdio.h>
#include<string.h>
int main() {
	char arr[7] = "abcdef";
	printf("strlen:%d\n", strlen(arr));
	printf("sizeof:%zu\n", sizeof(arr));

在这里插入图片描述

注意点1.
sizeof不是库函数,是操作符!,strlen是库函数。
库函数必须加(),如:main(){},printf()等。
所以sizeof格式可以不加(),如:sizeof a等价于sizeof(a),其中a是变量。
注意点2.
sizeof(int)//ok
sizeof int //err
这里会有一个问题为什么int是错误的?
原因是因为当sizeof放类型时,不能省略().
注意点3.
%zu是专门用来打印sizeof()的返回在这里插入图片描述
在这里插入图片描述
第一想法为什么数组越界还能打印出来呢?
原因是因为sizeof并不会去访问这个元素,而是通过arr类型判断出他的大小。

sizeof(arr),是计算整个数组的大小,前提()中为数组名。
sizeof(arr),此时arr为整个数组的地址,&arr也是整个数组的地址。
以上是两种特殊情况,其余情况arr均为首元素的地址

在这里插入图片描述

sizeof中的表达式不会进行运算,根据a计算大小。

在这里插入图片描述
在这里插入图片描述

fun函数中因为传送的是arr数组名首元素的地址,所以是4 。
而main函数中sizeof(arr)是整个数组的地址,所以为20。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值