C语言 sizeof和strlen精讲

"本文详细讲解了C语言中的sizeof运算符和strlen函数的区别与应用。sizeof用于计算变量或类型占用的字节数,包括字符串中的结束符''。而strlen函数则计算字符串的实际长度,不包含结束符。文章通过实例展示了sizeof和strlen在数组及字符数组中的不同表现,强调了数组名在不同上下文中的含义及其在内存地址和大小计算上的差异。"
摘要由CSDN通过智能技术生成

sizeof和strlen精讲

简介

  1. sizeof操作符,计算变量或类型大小为几个字节。如果是计算字符串的长度时,
    会将\0 计算在内,因为\0是占个内存位置,视为结束字符。
// 如果参数为指针的话 永远都是4/8个字节 根据电脑是32位/64位系统决定
// 例如:32位操作系统 这32位为32位地址总线 代表你PC机的寻址能力 以及
// 内存存储时 地址编号范围和能存储多大空间
sizeof(参数)  
  1. strlen函数,计算字符串的长度(不包含\0)。

strlen接受的参数为字符指针 不能是实际的值

数组名不同含义

数组名的意义:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。
//一维数组
int a[] = {1,2,3,4};
// 这里的数组名a,单独存在sizeof内,则视为整个数组地址
printf("%d\n",sizeof(a));
// sizeof内进行a+0运算 a此时为数组首元素地址 
printf("%d\n",sizeof(a+0));
// 对数组名解引用 得到数组首元素的值
printf("%d\n",sizeof(*a));
// 只要进行运算 例:a+1为数组首元素地址+1 偏移对应类型的字节长
printf("%d\n",sizeof(a+1));
// 访问数组第二个元素 得到值 
printf("%d\n",sizeof(a[1]));
// &数组名 取整个数组的地址 
printf("%d\n",sizeof(&a));
// 取出整个数组的指针 为数组指针 解引用得到的整个数组
printf("%d\n",sizeof(*&a));
// 对整个数组取地址 再加1 1的含义为偏移整个数组的长度
printf("%d\n",sizeof(&a+1));
// []>& 先获取a[0] 第一个元素 对它取地址 
printf("%d\n",sizeof(&a[0]));
// 先对数组下标为0的元素取地址 再加1 此时如果是整形 加1跳过四个字节 得到第二个元素
printf("%d\n",sizeof(&a[0]+1));
//字符数组
char arr[] = {'a','b','c','d','e','f'};
// 取出整个数组长度 有则加上\0 定义无则不加
printf("%d\n", sizeof(arr));
// 取出数组首元素地址
printf("%d\n", sizeof(arr+0));
// 取出数组首元素的值
printf("%d\n", sizeof(*arr));
// 取出数组第二个元素值
printf("%d\n", sizeof(arr[1]));
// 取出整个数组地址
printf("%d\n", sizeof(&arr));
// 取出整个数组地址+1 步长为整个数组
printf("%d\n", sizeof(&arr+1));
// 取出数组首元素地址+1 步长为一个char字节
printf("%d\n", sizeof(&arr[0]+1));

// 取出整个数组长度 不包含\0 随机
printf("%d\n", strlen(arr));
// 取出数组地址 +0  还是地址
printf("%d\n", strlen(arr+0));
// 解引用首元素地址 报错
printf("%d\n", strlen(*arr));
// 取出数组第二个元素 报错
printf("%d\n", strlen(arr[1]));
// 取出整个数组地址 strlen参数问题 实际为arr首地址
printf("%d\n", strlen(&arr));
// 取出整个数组地址 +1 步长为整个数组 strlen只接收一个字符指针 截断得到这个数组的首元素地址
// C语言内存时用高地址在用低地址 可得知此时与上面相差6个字节 但是没有哦\0 也是随机值
printf("%d\n", strlen(&arr+1));
// 取出第一个元素地址 +1 步长为一个char类型
printf("%d\n", strlen(&arr[0]+1)):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值