【C语言】sizeof 和 strlen

sizeof和strlen的对比

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;
}

在这里插入图片描述

strlen

strlen 是C语言库函数,功能是求字符串长度。函数原型如下:

size_t strlen ( const char * str );

统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。
strlen 函数会一直向后找 \0 字符,直到找到为止,所以可能存在越界查找。

#include <stdio.h>
int main()
{
 char arr1[3] = {'a', 'b', 'c'};
 char arr2[] = "abc";
 printf("%d\n", strlen(arr1));
 printf("%d\n", strlen(arr2));
 
 printf("%d\n", sizeof(arr1));
 printf("%d\n", sizeof(arr1));
 return 0;
}

sizeof 和 strlen的对比

sizeof
1. sizeof是操作符
2. sizeof计算操作数所占内存的⼤⼩,单位是字节
3. 不关注内存中存放什么数据
strlen
1. strlen是库函数,使⽤需要包含头⽂件 string.h
2. srtlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数
3. 关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界

数组和指针笔试题解析

一维数组

int a[] = {1,2,3,4};

printf("%d\n",sizeof(a));  //16
//sizeof(数组名)的情况,计算的是整个数组大小

printf("%d\n",sizeof(a+0));  // 4/8
//a表示的就是数组首元素地址,a+0还是首元素

printf("%d\n",sizeof(* &a));   //16
//1.&与 * 抵消
//2.&a的类型为数组指针,int(*)[4],*&a就是对数组指针解引用后访问一个数组大小

字符数组

char arr[]="a,b,c,d,e,f"

printf("%zd\n",strlen(*arr));
//传递的是'a'-97 //arr

printf("%zd\n",strlen(%arr));    //6
//arr虽然是数组地址,但是也指向数组起始位置

printf("%zd\n",strlen(&arr+1));
//随机值

二维数组

int a[3][4] = {0};
printf("%d\n",sizeof(a));
//12*4=48个字节,数组名也被单独放在sizeof

printf("%d\n",sizeof(a[0]+1));
//a[0]+1即为&a[0][1]

printf("%d\n",sizeof(a+1));
//这里的a是数组首元素地址吗,应该是第一行的地址,则a+1是第二行的地址

printf("%d\n",sizeof(*a));
//*a--> *(a+0)--> a[0]

printf("%d\n",sizeof(a[3]))
//这里不存在越界
//因为sizeof内部表达式不会真实计算,只会根据其类型计算大小,并不会真实计算

总结

数组名的意义:

  1. sizeof(数组名),这里的数组名表⽰整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值