#include <stdio.h>
#include <stdlib.h>
// 部分初始化方式
void partialInitialization(int **arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (i == j) {
arr[i][j] = 1;
} else {
arr[i][j] = 0;
}
}
}
}
// 按行初始化方式
void rowInitialization(int **arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = 0;
}
arr[i][i] = 1;
}
}
// 打印数组
void printArray(int **arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int size = 5;
int **arr = (int **)malloc(size * sizeof(int *));
for (int i = 0; i < size; i++) {
arr[i] = (int *)malloc(size * sizeof(int));
}
// 使用部分初始化方式
partialInitialization(arr, size);
printf("部分初始化后的数组:\n");
printArray(arr, size);
// 释放内存
for (int i = 0; i < size; i++) {
free(arr[i]);
}
free(arr);
// 重新分配内存
arr = (int **)malloc(size * sizeof(int *));
for (int i = 0; i < size; i++) {
arr[i] = (int *)malloc(size * sizeof(int));
}
// 使用按行初始化方式
rowInitialization(arr, size);
printf("\n按行初始化后的数组:\n");
printArray(arr, size);
// 释放内存
for (int i = 0; i < size; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
部分初始化方式特点
- 初始化逻辑:在遍历二维数组的每一个元素时,判断当前元素是否在对角线上,如果是则赋值为1,否则赋值为0。
- 优点:逻辑直接,易于理解,能够精确控制每个元素的赋值过程。
- 缺点:对于大型数组,这种逐个元素判断的方式可能效率较低,因为每次循环都要进行条件判断。
按行初始化方式特点
- 初始化逻辑:先将每一行的所有元素初始化为0,然后再将每行的对角元素赋值为1。
- 优点:先整体初始化每行,减少了条件判断的次数,对于大型数组在一定程度上提高了初始化效率。
- 缺点:代码结构相对复杂一点,需要先进行整体初始化,再进行对角线元素的特殊赋值。