【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法(一)

简介: 【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法(一)

【C语言】万字详解——sizeof与strlen的用法

数组名的意义


一维数组

    sizeof用法

字符数组

    sizeof用法

    strlen的用法

字符串数组

    sizeof用法

    strlen的用法

指针与字符串

    sizeof用法

    strlen用法

二维数组

    sizeof



数组意义


在讲所有东西之前,需要先明确一个关键问题


1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小, 单位是字节

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址

3.除此之外所有的数组名表示首元素的地址


一维数组


sizeof用法

   //一维数组

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

printf("%d\n", sizeof(a));

printf("%d\n", sizeof(a + 0));

printf("%d\n", sizeof(*a));

printf("%d\n", sizeof(a + 1));

printf("%d\n", sizeof(a[1]));

printf("%d\n", sizeof(&a));

printf("%d\n", sizeof(*&a));

printf("%d\n", sizeof(&a + 1));

printf("%d\n", sizeof(&a[0]));

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


运行结果:

微信图片_20220415160330.png

解:


printf("%d\n", sizeof(a));  16字节


因为int a[ ]里有4个元素,每个元素是int类型,占四个字节,所以整个数组大小为16字节


printf("%d\n", sizeof(a + 0)); 4/8字节在32/64位平台下


此时此刻的数组名a表示的是首元素地址,首元素地址+0,还是首元素地址,地址的大小为 4/8在32/64位平台下


   printf("%d\n", sizeof(*a)); 4字节


a是数组名,表示首元素地址,然后对首元素地址解引用,所以*a就是首元素,首元素是个int型,大小为4字节


printf("%d\n", sizeof(a + 1)); 4/8字节在32/64位平台下


a是数组名,表示首元素地址,a+1是第二个元素的地址,所以大小为4/8字节在32/64位平台下

printf("%d\n", sizeof(a[1])); 4字节

a[1]就是第二个元素,大小为4字节


printf("%d\n", sizeof(&a)); 大小为4/8字节在32/64位平台下

&a取出的是整个数组的地址(从数值的角度看等于首元素地址),只要是地址,大小就为4/8字节在32/64位平台下


printf("%d\n", sizeof(*&a)); 16字节


&a取出的是整个数组的地址,* &a是对整个数组的地址解引用,拿到的是整个数组,所以大小为16字节


printf("%d\n", sizeof(&a + 1)); 4/8字节在32/64位平台下


&a是数组的地址,&a+1是数组的地址+1,虽然相当于跳过了整个数组,但还是一个地址,所以大小还是4/8


printf("%d\n", sizeof(&a[0])); 4/8字节在32/64位平台下

第1个元素地址,地址大小为4/8字节在32/64位平台下


printf("%d\n", sizeof(&a[0] + 1)); 4/8字节在32/64位平台下


第一个元素地址+1,就是第二个元素地址,地址大小为4/8字节在32/64位平台下

————————————————

版权声明:本文为CSDN博主「敲代码的布莱恩特」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/DerrickWestbrook/article/details/120114553

相关文章
|
10天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
82 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
14天前
|
C语言
【C语言】sizeof 关键字详解
`sizeof` 关键字在C语言中用于计算数据类型或变量在内存中占用的字节数。它是一个编译时操作符,对性能没有影响。`sizeof` 可以用于基本数据类型、数组、结构体、指针等,了解和正确使用 `sizeof` 对于内存管理和调试程序非常重要。
42 2
|
3月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
239 88
|
2月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
4月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
186 2
|
4月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
93 1
|
6月前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
5月前
|
存储 C语言
C语言中static关键字的作用与用法解析
C语言中static关键字的作用与用法解析
|
6月前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
|
6月前
|
C语言
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现