C语言如何动态分配二维数组

C语言如何动态分配二维数组

  • 使用malloc()、free()函数进行动态分配,这两个函数包含于stdlib.h或malloc.h中

假如要申请一个3行5列的二维数组内存

 1 #include <stdlib.h>
 2 int main()
 3 {
 4     // 为二维数组分配3行
 5     int **a = (int **)malloc(3 * sizeof(int *));
 6     // 为每行分配5列
 7     for(int i = 0; i < 3; i++)
 8     {
 9          a[i] = (int *)malloc(5 * sizeof(int));
10     }
11     return 0;
12 }

内存释放

1 // 先释放每列
2 for(int i = 0; i < 3; i++)
3     free(a[i]);
4 // 再释放每行
5 free(a);
6 a = NULL; // 赋空

原文地址:https://www.cnblogs.com/0xWitch/p/9314621.html

时间: 2024-08-05 20:35:29

C语言如何动态分配二维数组的相关文章

C语言动态分配二维数组内存

C语言内存管理主要包括malloc().remalloc().free()三个函数. malloc原型 extern void *malloc(unsigned int num_bytes); m行n列的 二维数组的分配,主要有三种方法: 一.分配一个长度为m的二级指针,指针的指向的内容分别指向一个长度为n的一位数组 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>

0709 C语言常见误区----------二维数组做参数

总结: 1.二维数组名是指向一位数组的指针,本例中,其类型为 int (*)[4],在传递的过程中丢失了第一维的信息,因此需要将第一维的信息传递给调用函数. 关于二维数组名代表的类型,可通过下面的例子看出. 1 /************************************************************************* 2 > File Name: test_2arr.c 3 > Author:Monica 4 > Mail:[email prot

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*

c++ 动态分配二维数组 new 二维数组

#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //建立一个16行5列的数组 int **p = new int*[16];//分配堆内存16个 int* for(int i = 0;i < 16;i++)//分配堆内存给每一个int* p[i] = new int[5]; //给这个数组赋值 int k = 0; f

c语言指针与二维数组

1 指针数组 例子: int i,j; int x[2][3]={{1,2,3},{4,5,6}}; int *p[2]={x[0],x[1]};//声明一个含有2个元素的一维int指针数组p for(i=0;i<2;i++) { for(j=0;j<3;j++) { cout<<*(p[i]+j)<<endl; } } 输出语句为cout<<p[i][j]<<endl;也是可以的. int i,j; int x[2][3]={{1,2,3},{

C语言笔记(二维数组与数值指针)

一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数组来代替.但是在实际的应用中,有时候使用二维数组会更加直观,方便程序的编程. (3)两者在内存使用效率上是一模一样的. 二.二维数组的第一维和第二维概念 (1)例如 int a[2][5]中,前面的2表示第一维:后面的5表示第二维 (2) 二维数组的第一维表示最外部的那一层,第一维本身也是一个数组,

c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。

将一个二维数组行和列的元素互换,存到另一个二维数组中. 解:程序: #include<stdio.h> int main() { int i, j, a[2][3] = { {1,2,3},{4,5,6} },b[3][2]; printf("array a:\n"); for (i = 0; i <=1; i++)//处理a数组中的一行中各元素 { for (j = 0; j <= 2; j++)//处理a数组中的某一列元素 { printf("%5

C语言第五讲:二维数组,多维数组

一.二维数组 二维数组的定义:数据类型  数组名[常量表达式1][常量表达式2] = {值1, 值2,....值n}; 例如: int array[3][3] = {{1, 2, 3}, {2, 1, 3}, {3, 1, 2}}; 二维数组array[3][3] 相当于是由三个含有三个元素的一维数组所组成的. 数组元素个数怎么求:两个维度的下标相乘 访问二维数组中的元素:双下标 多维数组 : 三维数组:数组名[常量表达式1][常量表达式2][常量表达式3] = {值1, 值2,....值n};

C语言如何将二维数组作为函数的参数传递

可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: void Func(int array[][]); 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无