使用动态方式创建1D和2D矩阵
int *create1DArray(int size) { int i; int *arr = (int *)(malloc(sizeof(int) * size)); for (i = 0; i < size; i++) { arr[i] = i * i; } return arr; } int *create2DArray(int rows, int cols) { int i, j; int **arr = (int **)(malloc(sizeof(int *) * rows)); for (i = 0; i < rows; i++) { arr[i] = (int *)(malloc(sizeof(int) * cols)); for (j = 0; j < cols; j++) { arr[i][j] = (i * j) + (i + j); } } return arr; }
这段代码的目的是创建一个二维数组,并返回一个指向该数组的指针。这个二维数组的大小是由参数 `rows` 和 `cols` 决定的。这是一种常见的在C语言中动态创建二维数组的方法。
下面是对这段代码的逐行解释:
1. `int **arr = (int **)(malloc(sizeof(int *) * rows));`:这行代码首先计算需要为行指针数组分配多少内存(每个行指针的大小是 `sizeof(int *)`,因此需要的总内存是 `sizeof(int *) * rows`),然后调用 `malloc` 来分配这么多的内存。分配的内存的地址被存储在 `arr` 中,`arr` 是一个指向指针的指针(也就是说,它指向的东西本身是一个指针)。
2. `for (i = 0; i < rows; i++)`:这个循环遍历每一行。
3. `arr[i] = (int *)(malloc(sizeof(int) * cols));`:这行代码在每一行中分配内存,用于存储该行的元素。每个元素的大小是 `sizeof(int)`,因此需要的总内存是 `sizeof(int) * cols`。分配的内存的地址被存储在 `arr[i]` 中,`arr[i]` 是一个指针(也就是说,它指向的东西是一个整数)。
4. `for (j = 0; j < cols; j++)`:这个循环遍历每一列。
5. `arr[i][j] = i * cols + j;`:这行代码计算一个值并将其存储在数组的特定位置(即第 `i` 行第 `j` 列)。
6. `return arr;`:这行代码返回创建的二维数组的地址。
在这个函数执行完后,你将得到一个动态分配的二维数组,其行数为 `rows`,列数为 `cols`,并且每个元素的值为 `i * cols + j`,其中 `i` 是该元素所在的行,`j` 是该元素所在的列。
void print2DArray(int **p, int rows, int cols) { printf("2D Array:\n"); for (int i = 0; i < rows; i++) { printf("["); for (int j = 0; j < cols; j++) { printf("%d", p[i][j]); if (j != cols - 1) { printf(", "); } } printf("]\n"); } } void print1DArray(int *p, int size) { printf("Array: ["); for (int i = 0; i < size; i++) { printf("%d", p[i]); // 不在最后一个元素后面打印逗号 if (i != size - 1) { printf(", "); } } printf("]\n"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现