11.9 关于我为什么说上章有那么多问题,聚焦于数组在函数传参的时候

发布于 2024-11-09  396 次阅读


int b(int arr[1]) {
return arr[0];
}

在C语言中,函数参数中的数组声明(例如 int arr[1]实际上会被视为指针

函数传参传arr[10]难道不是表示传递arr这个数组的第十个元素的地址吗?

答:不是。在 C 语言中,arr[10] 作为函数参数并不表示传递数组的第十个元素的地址,而是表示一个数组类型的参数

实际上,C 语言中的数组参数在传递时会退化为指针,因此 arr[10]arr 在函数参数中是等价的,都是指向数组首元素的指针

在函数内部,你可以使用数组下标(如 arr[i])来访问数组元素,这实际上是通过指针进行的。编译器会arr[i] 转换为 *(arr + i),这意味着它在访问数组元素时是通过指针运算来实现的

同时,这也意味着如果你在函数内部尝试访问超出实际传递的数组的元素大小,你可能会遇到未定义行为(当然,这是废话)

届ける言葉を今は育ててる
最后更新于 2024-12-22