面试题答案
一键面试在C语言中,当一个函数的参数是数组时,实际传递的是数组首元素的地址,这是一种传址调用。
示例代码如下:
#include <stdio.h>
// 函数声明
void modifyArray(int arr[], int size);
int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
printf("修改前数组: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");
modifyArray(myArray, size);
printf("修改后数组: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");
return 0;
}
// 函数定义
void modifyArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2; // 修改数组元素值
}
}
原理:
- 传址调用:C语言在函数参数传递数组时,传递的是数组首元素的地址。这意味着函数内部对数组的操作,实际上是对调用函数中数组的操作,因为它们指向同一块内存区域。
- 数组名作为指针:在函数参数列表中,
int arr[]
和int *arr
本质上是一样的,都表示一个指向int
类型的指针。所以在函数内部,可以像操作指针一样来访问和修改数组元素。 - 内存共享:由于函数内外共享同一块内存,函数对数组元素的修改会直接反映在调用函数的数组上。