【c语言】动态开辟一个二维数组

// 动态开辟一个二维数组

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i = 0;
	int j = 0;
	int line = 0;
	int row = 0;
	int **p = NULL;
	printf("输入行数:");
	scanf("%d", &line);
	printf("\n");
	printf("输入列数:");
	scanf("%d", &row);
	printf("\n");
	// 申请全部行的首指针
	p = (int **)malloc(line * sizeof(int *));
	if (NULL == p)
	{
		return;
	}
	for (i = 0; i < line; i++)
	{
		//申请列的指针
		*(p + i) = (int *)malloc(row *sizeof(int) );
		if (*(p + i) == NULL)
		{
			return;
		} 

	}
//  初始化数组
	for (i = 0; i < line; i++)
	{
		for(j = 0; j < row; j++)
		{
			p[i][j] = i + 1;
		}
	}
//  输出
	for (i = 0; i < line; i++)
	{
		 for(j = 0; j < row; j++)
		{
			printf("%d  ", p[i][j]);
		}
	}
	printf("\n");
//  释放内存
	for (i = 0; i < line; i++)
	{
		free(*(p + i));
		p[i] = NULL;
	}
	free(p);
	p = NULL;
	return 0;
}

时间: 2024-07-31 12:49:06

【c语言】动态开辟一个二维数组的相关文章

&nbsp; 动态开辟有序二维数组

#include<stdio.h>#include<stdlib.h>int main(){ //int arr[3][4] // int row; int col; scanf_s("%d%d", &row, &col); int  **q = (int **)malloc(sizeof(int)* row);//开辟一块空间 存储一个含有row数组指针的数组 q[0] = (int *)malloc(sizeof(int)*col); for

用malloc开辟一个二维数组

#include <stdio.h> #include <stdlib.h> int main() { int **p; int i; int j; int row,coloum; printf("请输入你所要申请的二维数组的行和列:"); scanf("%d%d",&row,&coloum); p=(int**)malloc(sizeof(int*)*row); for(i=0;i<row;i++) { p[i]=(i

动态申请和释放一个二维数组

动态申请一个二维数组也很常见,下面是常见的两种形式. //方法1 unsigned char** pImg= new unsigned char*[m]; for(int i=0;i<m;i++){ pImg[i]=new unsigned char[n]; } //方法2 unsigned char** pImg= new unsigned char*[m]; unsigned char* arr= new unsigned char[m*n]; for(int i=0;i<m;i++){

c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

1 //题目:找出一个二维数组的"鞍点",即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. 2 // 3 #include "stdio.h" 4 #include <stdlib.h> 5 int main() 6 { 7 int i,j,k,hang=1,lie=1; 8 printf("输入行"); 9 scanf("%d",&hang); 10 printf("输入列"

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

[CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组

13.10 Write a function in C called my2DAlloc which allocates a two-dimensional array. Minimize the number of calls to malloc and make sure that the memory is accessible by the notation arr[i][j]. 这道题让我们写个C语言函数my2DAlloc用来给一个二维数组分配内存,并且让我们尽可能的少调用malloc

java 数据结构 图中使用的一些常用算法 图的存储结构 邻接矩阵:图的邻接矩阵存储方式是用两个数组来标示图。一个一位数组存储图顶点的信息,一个二维数组(称为邻接矩阵)存储图中边或者弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 实例如下,左图是一个无向图。右图是邻接矩阵表示:

以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 对于下图无向图G1来说,G1=(V1, {E1}),其中顶点集合V1={A,B,C,D}:边集合E1={(A,B),(B,C),(C,D),(D,A),(A,C)}: 有向图:若

返回一个二维数组最大联通子数组的和

一.题目 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 二.设计思想 方法一:首先若要对二维数组进行分析,之前我们已经做过关于一位数组的练习,所以我们可以把它化简成为一个一维数组.再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标.这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到:第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后得到的结果就是最大联通子数组的和

new一个二维数组(转)

转自:http://www.cnblogs.com/irvinow/archive/2009/02/21/1395340.html 定义二维数组char array[x][y]; 1.只定义个一维的就可以了 char *array; array = new char[x*y]; 访问的时候*(array+i*y+j)表示array[i][j] 2.定义一个二维数组 char **array1 array1 = new char *[x]; for(i=0;i<x;++i) array1[i] =