|
【教程】用calloc函数创建二维数组的两种方法 |
一派護法 十九級 |
【方法一:一次性创建全部数组空间】 #include <stdio.h> #include <stdlib.h>
int main() { // 创建二维数组 int[4][10] int i, j; int **array = (int **)calloc(4, sizeof(int *)); // 首先创建顶层指针array[][] array[0] = (int *)calloc(4, 10 * sizeof(int *)); // 这个二维数组一共有4 * 10个int型的连续空间,把这40个元素的空间直接一次性创建,然后把其中第一个元素的地址赋给指针数组array的第一个元素 /* 其实这个二维数组就是一个连续的40个int空间 和一位数组int[40]没什么本质区别 只不过我们又创建了指针数组int *array[4],其中这个数组的每个元素都是一个指针 第一个指针array[0]指向这个空间的第0个元素开头 第二个指针array[1]指向这个空间的第10个元素开头 第三个指针array[2]指向这个空间的第20个元素开头 第四个指针array[3]指向这个空间的第30个元素开头 这样一来,我们就可以以为array[0] ~ [3]每个都是一个长度为10的int数组了 至于*array其实就相当于array[0] */ array[1] = array[0] + 10; // 把第10个元素的地址赋给array[1] array[2] = array[0] + 20; array[3] = array[0] + 40; // array[0] 就是我们刚才创建的空间的首地址 for (i = 0; i < 4; i++) for (j = 0; j < 10; j++) array[i][j] = (i + 1) * (j + 2); for (i = 0; i < 4; i++) { for (j = 0; j < 10; j++) printf("%d ", array[i][j]); putchar('\n'); } free(*array); // 一次性释放全部int空间 free(array); // 释放指针空间 return 0; } 输出结果: 2 3 4 5 6 7 8 9 10 11 4 6 8 10 12 14 16 18 20 22 6 9 12 15 18 21 24 27 30 33 8 12 16 20 24 28 32 36 40 44
-------------------------------- Process exited after 0.006671 seconds with return value 0 Press any key to continue . . .
|
一派護法 十九級 |
【方法2:分别创建每个第二维空间】 #include <stdio.h> #include <stdlib.h>
int main() { // 创建二维数组 int[4][10] int **array = (int **)calloc(4, sizeof(int *)); // 创建指针数组array[n] int i, j; array[0] = (int *)calloc(10, sizeof(int)); // 分别给每个指针数组创建空间并指向它 array[1] = (int *)calloc(10, sizeof(int)); array[2] = (int *)calloc(10, sizeof(int)); array[3] = (int *)calloc(10, sizeof(int)); for (i = 0; i < 4; i++) for (j = 0; j < 10; j++) array[i][j] = (i + 1) * (j + 2); for (i = 0; i < 4; i++) { for (j = 0; j < 10; j++) printf("%d ", array[i][j]); putchar('\n'); } free(array[0]); free(array[1]); free(array[2]); free(array[3]); free(array); return 0; }
|
一派護法 十九級 |
【封装成函数】 #include <stdio.h> #include <stdlib.h>
int **create2d(int row, int col) { int i; int **pp = (int **)malloc(row * sizeof(int *)); *pp = (int *)malloc(row * col * sizeof(int)); for (i = 1; i < row; i++) pp[i] = pp[i - 1] + col; return pp; }
void free2d(int **pp) { free(*pp); free(pp); }
int main() { int **a = create2d(2, 3); int i, j; a[0][0] = 10; a[0][1] = 20; a[0][2] = 30; a[1][0] = 40; a[1][1] = 50; a[1][2] = 60; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%d ", a[i][j]); putchar('\n'); } free2d(a); return 0; }
|
一派護法 十九級 |
【C++创建二维数组的简易方法】 #include <stdio.h>
int main(void) { int (*arr)[3] = new int[2][3]; arr[0][0] = 10; arr[0][1] = 20; arr[0][2] = 30; arr[1][0] = 40; arr[1][1] = 50; arr[1][2] = 60; int *p; for (p = arr[0]; p < arr[0] + 6; p++) { printf("%d\n", *p); }
delete[] arr; return 0; }
|