c - 当我们将数组作为参数传递时,实际上会发生什么?
问题描述
void fun(int arr[8])
{
printf("\nArray size inside fun() is %d", sizeof(arr));
}
int main()
{
int arr[8] = {1, 2, 3, 4, 5, 6, 7, 8};
printf("Array size inside main() is %d", sizeof(arr));
fun(arr);
return 0;
}
为什么arr[8]
函数内部数组的大小fun()
是 4 字节,而arr[8]
函数 main() 中的数组是 32 字节?尽管它们可以存储 8 个整数,每个 4 个字节。arr[8]
func()中数组的大小也应该是 32。
当我们将数组作为参数传递时,实际上会发生什么?
解决方案
中main
,sizeof
正在计算arr
着8 * sizeof(int)
。中fun
,sizeof
正在计算arr
着sizeof(int *)
。如您所见,数组在传递给函数时衰减为指针。
推荐阅读
- postgresql - 在 postgres SQL 中查询 jsonb 字段
- android - 如何在 Binding Adapter 中将此 java 代码写入 kotlin
- python - 如何在 Google Script 中从这个特定的 POST HTTP 调用中获取结果 - 在 python 中运行良好
- r - 每次使用可能性霍克斯时都会出现致命错误
- php - 如何从表中获取某些内容,以便可以使用它从表中提取其他数据?
- azure-devops - REST API 使用测试用例 ID 或测试用例名称更新 Azure Devops 中的测试点执行结果
- python - 您如何将普通日期(dd-mm-yyyy)转换为数据框中的儒略日期?
- python - 何时将小数视为“规范”?
- javascript - 隐藏元素而不是 onBlur() 的更好选择是什么?
- node.js - 简单的 REST 应用程序在本地工作但不在 heroku 中