面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
void processIrregularArray(int *arr[], int size) {
for (int i = 0; i < size; i++) {
// 这里假设有一个方法获取每行的元素个数,实际需根据具体逻辑来
int rowSize = i == 0? 2 : (i == 1? 3 : 1);
for (int j = 0; j < rowSize; j++) {
arr[i][j]++;
}
}
}
与规则多维数组作为函数参数时的区别
- 函数参数传递:
- 规则多维数组:函数参数可直接写数组名,如
void func(int arr[][COL_SIZE], int rowSize)
,其中COL_SIZE
是固定的列数。编译器可根据此信息确定数组元素在内存中的布局。 - 不规则二维数组:函数参数为指向指针的指针
int *arr[]
或int **arr
,因为每行长度不固定,无法像规则数组那样通过固定列数确定内存布局。同时需要额外传递一个参数size
来表示数组的行数。
- 规则多维数组:函数参数可直接写数组名,如
- 数组访问:
- 规则多维数组:访问元素时可通过
arr[i][j]
直接访问,编译器根据固定的列数和i
、j
的值计算元素地址。 - 不规则二维数组:访问元素同样用
arr[i][j]
,但由于每行长度不同,在访问前需要明确知道每一行的长度,否则可能导致越界访问。如上述代码中需手动确定每行长度(实际应用中需根据逻辑获取)。
- 规则多维数组:访问元素时可通过
特别注意的地方
- 内存管理:由于是通过
malloc
分配内存,使用完后需要在适当位置用free
释放内存,避免内存泄漏。 - 每行长度记录:必须妥善记录或能动态获取每行的长度,以保证访问数组元素时不会越界。