【C 语言】sizeof 操作符
@[toc]
sizeof 操作符
上篇博客提到了一个知识点 【链接】
sizeof 操作符括号内的表达式是不会真正计算的
这个是为什么呢?
我们先来看看 sizeof 的基本用法
基本用法
1 |
|
打印结果为 3 个 4
但当我们以这种方式书写的时候,编译器就会报错
1 | printf("%d\n",sizeof int); |
在使用 sizeof 的时候,变量 a 的括号可以省略
但直接计算 int 的时候,括号不能省略
这说明 sizeof 是一个操作符,而不是函数
1 | int arr[10]={0}; |
这两句代码打印的都是 40,其中 int [10] 是 arr 数组的类型
冷知识,我们可以用 9 [arr] 来访问数组元素
但这么做会降低代码的可读性,所以我们还是采取 arr [9] 的形式更好
1 | int arr[10]={0}; |
sizeof 和函数传参
先来看看下面这个代码
1 |
|
32 位平台,打印结果如下
VS 编译器下
x86–32 位–int 4
x64–64 位–int 8
为什么在 main 函数里面打印的是 40 和 10
到了函数里面就只有 4 了呢?
数组传参
数组在传参的时候,传过去的只是首元素的地址
数组名代码数组首元素的地址
问:为什么字符变量只占一个字节,但这里打印的是 4 呢?
答:这里传入的是 char 数组的指针,指针变量都是 4 个字节
siezof 和表达式
现在就到我们的重点了
为什么 sizeof 括号里的表达式没有真正地运算?
1 | short s=5; |
这里就牵扯到 C 语言程序运行的几个步骤了
- 编译–test.c
- 链接
- 运行–test.exe
简单地说,只有在链接之后运行的代码,才会真正给 a 赋值
而 sizeof 括号中的语句,是在编译中运行的
程序会先计算这个表达式,推断出它的长度,再返回给 printf 打印
所以,sizeof 括号内的表达式不会真的给 S 赋值
你明白了吗?
sizeof 和 strlen 的区别
再求字符串的长度的时候,我们可以使用 sizeof,也可以使用 strlen
这两个的主要区别如下
- sizeof 会计算整个数组内字符串的长度,包括字符串暗藏的’\0’
- strlen 计算长度的时候,遇到’\0’后停止
在使用的时候,我们需要注意 sizeof 在计算长度的时候是会比 strlen 多算一个的
根据具体情况选择 sizeof 或者 strlen
结语
这篇博客迟到太久了,最近实在是有点忙
如果有错误,还请各位 dalao 指出!万分感谢!
高数太难了啊啊啊啊啊!(哭唧唧)
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台