面试题答案
一键面试- 数组名本质变化:
- 在C语言中,当一维数组作为函数参数传递时,数组名会退化为指向数组首元素的指针。这意味着它失去了原本作为数组时所具有的长度等信息。例如:
void func(int arr[]) { // 这里的arr实际上是int *类型 } int main() { int a[5] = {1, 2, 3, 4, 5}; func(a); return 0; }
- 在函数中正确处理传递进来的一维数组以获取元素个数的方法:
- 方法一:传递数组长度作为额外参数
void printArray(int arr[], int len) { for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int a[5] = {1, 2, 3, 4, 5}; printArray(a, sizeof(a)/sizeof(a[0])); return 0; }
- 方法二:使用结构体封装数组和长度
typedef struct { int data[100]; int length; } ArrayStruct; void printArray(ArrayStruct arr) { for (int i = 0; i < arr.length; i++) { printf("%d ", arr.data[i]); } printf("\n"); } int main() { ArrayStruct a = {{1, 2, 3, 4, 5}, 5}; printArray(a); return 0; }