sizeof分析

1.1 基本类型
这里写图片描述


1.2 指针
这里写图片描述


1.3 数组
1.3.1 数组的sizeof返回整个数组所占的字节数,即(数组元素个数×每个元素所占字节)。
这里写图片描述
结果:4*4=16


1.3.2 常量字符串与字符数组的内存分配方式相同。
这里写图片描述
结果都是:
这里写图片描述


1.3.3 数组和指针所占的字节数不同,应注意区分。
这里写图片描述
结果:这里写图片描述
再看一个例子:
这里写图片描述
结果是:这里写图片描述
分析:
首先double *(*b)[3][6];是一个二维数组,里面的元素都是一个指针,指向double类型的数。b也是一个指针,它指向这个二维数组。
1. b:b是一个指针,所以为4.
2. *b:*b相当于定义一个double* m[3][6]中的m,所以*b=m=3*6*4,因为元素是指针,所以每个元素占4个字节,结果为72.
3. **b:**b相当于上面说的*m,也就是m[0]的大小。为6*4=24.
4. ***b:***b相当于*m[0],即m[0][0]的大小,为4.
5. ****b : ****b就是m[0][0]所指向的那个单元。为double型,所以为8。


1.3.4 函数形式参数中的数组会蜕变为指针,原因是数组参数“传址调用”,调用者只需将实参的地址传递过去。有一种情况例外,那就是参数是指向数组的指针。
例1.
这里写图片描述
分析:这里的函数的参数数组,会背蜕化为指针,所以p的大小为4.
同时,因为蜕化为指针,所以对p进行修改,也会对原来的数组进行修改。
结果:这里写图片描述

例2.
这里写图片描述
分析:这里的参数是int (*)[3]类型。这就是那种例外的情况,也就是参数是指向数组的指针。
所以结果为:
这里写图片描述
与之要注意区别的:
这里写图片描述
分析:这里参数是 int *[3]类型,即定义一个元素是指向int型的数组。本质上参数还是数组。所以结果为:
这里写图片描述


结构体跟联合下次专门弄一篇再写。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值