C语言 sizeof和strlen精讲
sizeof和strlen精讲
简介
- sizeof操作符,计算变量或类型大小为几个字节。如果是计算字符串的长度时,
会将\0 计算在内,因为\0是占个内存位置,视为结束字符。
// 如果参数为指针的话 永远都是4/8个字节 根据电脑是32位/64位系统决定
// 例如:32位操作系统 这32位为32位地址总线 代表你PC机的寻址能力 以及
// 内存存储时 地址编号范围和能存储多大空间
sizeof(参数)
- strlen函数,计算字符串的长度(不包含\0)。
strlen接受的参数为字符指针 不能是实际的值
数组名不同含义
数组名的意义:
- sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
- &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
- 除此之外所有的数组名都表示首元素的地址。
//一维数组
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)):
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)