c - 为什么整数数组 size(array) 的返回值只是元素个数的 4 倍?
问题描述
例如,如果我执行以下操作,
int array[5] = {1, 2, 3, 4, 5};
printf("%d", sizeof(array));
它将返回 4 次 # 的元素,即 5 = 20。
但我的问题是数组不需要指针吗?(地址)如果是这样,由于指针的大小为 8 个字节,为什么它不包含在大小中?
解决方案
但我的问题是数组不需要指针吗?(地址)
没有。数组只是一个对象序列——在这种情况下,是一个 5 的序列int
:
+–––+
array: | 1 | array[0]
+–––+
| 2 | array[1]
+–––+
| 3 | array[2]
+–––+
| 4 | array[3]
+–––+
| 5 | array[4]
+–––+
没有为任何指针留出空间 -表达式 array
将被转换(“衰减”)为指针表达式,以便它计算为第一个元素的地址(除非它是sizeof
or 或一元运算符的操作数&
)。
如果是这样,既然指针的大小为 8 个字节,为什么不包含在大小中?
不要假设指针具有特定的大小——仍然有 16 位和 32 位系统在使用,指向不同类型的指针不必具有相同的大小和表示形式。整个世界都不是 VAX x86-64。
推荐阅读
- mysql - 如何让 max(table1.date1) 小于 min(table1.date2)
- flutter - Flutter,重定向外部应用程序后打开通用链接
- python - PyTorch:“CrossEntropyLoss”对象没有属性“项目”
- vba - Visual Basic 中的 Application.OnTime
- jquery - 如何使用 AWS API Gateway 启用 CORS
- python - 有没有办法获得我打印的项目数量作为 Python 中的 FOR 循环的结果?
- spring-security - 扩展 SecurityExpressionRoot 以在 @Query 中访问
- three.js - 如何使用 gsap 为 camera.lookAt 设置动画?
- python - 如何基于滚动窗口查找将列附加到 Panda 数据框?
- dask - 如何减少 `dask_ml.xgboost` worker 内存消耗?