指针2 动态内存分配 二维数组

博客涉及嵌入式硬件和C语言相关内容,虽未给出具体内容,但可推测围绕嵌入式硬件开发中C语言的应用等信息技术关键信息。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在C语言中,动态分配二维数组有以下几种常见方法: ### 方法一:先分配一维指针数组,再为每个指针分配数组 此方法先申请一维的指针数组,接着该数组中的每个指针再申请数组,不过这种方法会使每行可能不相邻,进而导致访问效率较低[^1]。 ```c #include <stdio.h> #include <stdlib.h> int main() { int rows = 3; int cols = 4; // 分配指针数组 int **arr = (int **)malloc(rows * sizeof(int *)); if (arr == NULL) { return 1; } // 为每个指针分配数组 for (int i = 0; i < rows; i++) { arr[i] = (int *)malloc(cols * sizeof(int)); if (arr[i] == NULL) { return 1; } } // 使用数组 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { arr[i][j] = i * cols + j; } } // 输出数组 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", arr[i][j]); } printf("\n"); } // 释放内存 for (int i = 0; i < rows; i++) { free(arr[i]); } free(arr); return 0; } ``` ### 方法二:当列大小固定时,申请一维数组并将指针强转成二维数组指针二维数组的列大小固定,可申请一维数组,再将其指针强制转化为二维数组指针[^2]。 ```c #include <stdio.h> #include <stdlib.h> int main() { int rows; const int cols = 3; printf("请输入二维数组的行数(列值固定为%d):", cols); scanf("%d", &rows); // 申请一维数组 int *pp_arr = (int *)malloc(rows * cols * sizeof(int)); if (pp_arr == NULL) { return 1; } // 将指针强转成二维数组指针 int (*p)[cols] = (int (*)[cols])pp_arr; // 为二维数组赋值 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { p[i][j] = i + j; } } // 输出二维数组 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%5d", p[i][j]); } putchar('\n'); } // 释放资源 free(pp_arr); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值