c语言函数中创建二维数组 c语言定义二维数组

C语言编程,如何自动生成一个二维数组

程序主要通过malloc函数动态生成数组,srand和rand函数配合生成随机数据,代码如下,

从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供网站设计、成都网站建设、网站策划、网页设计、申请域名、网页空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。

//程序功能,实现自定义m*n二维数组,随机生成给定范围max-min的数组元素

#includestdio.h

#include stdlib.h

#include time.h

void main()

{

int i=0,j=0;

int m=0,n=0;//数组维数

int max=0,min=0;//数组数据范围

int **p=NULL;//二维指针,存放m*n个元素

int tmp;

printf("请输入数组维数m和n:");

scanf("%d %d",m,n);

printf("请输入数组元素最大最小值max和min:");

scanf("%d %d",max,min);

if(maxmin)//保证max大于min

{

tmp=max;

max=min;

min=max;

}

p=(int**)malloc(m*sizeof(int*));//先分配m个一维指针

if(NULL==p)

exit(1);

for (i = 0; i n ; i++)

{

p[i] = (int*)malloc(n*sizeof(int));//为m个一维指针分配n个整型大小的空间

if (NULL==p[i])

exit(1);

}

srand(time(NULL));

for(i=0;im;i++)

for(j=0;jn;j++)

p[i][j]=rand()%(max-min+1)+min;

printf("%d*%d二维数组为:\n",m,n);

for(i=0;im;i++)

{

for(j=0;jn;j++)

printf("%d\t",p[i][j]);

printf("\n");

}

for (i = 0; i n; i++)

{

free(p[i]);

p[i]=NULL;

}

free(p);

p=NULL;

}

void *malloc( size_t size );如果分配成功则返回指向被分配内存的指针,指针指向一个大小为size的内存空间;如果错误发生返回NULL。

一般srand和rand配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

c语言如何动态创建二维数组

既然是动态创建,那么,所创建的二维数组的行、列数应该具有“普适”性,即,应由“用户”确定二维数组的规模。这是有难度的。因为,二维数组要牵扯行指针,且需要固定每行的列元素个数,用这种思路就没有办法达到“普适”。

为此,必须清醒地知道,所谓二维数组,其元素在内存中依然是以一维的方式存放的。说实话,二维数组本质上是不存在的。

既然如此,那么,“构造”一个所谓的二维数组,只要能提供足够实用的函数(工具)操作这个二维数组就可以了。

综上,接受由用户决定的二维数组行、列值,申请一个一维数组的空间,按照二维数组方式进行定位和操作就可以了。

为简便起见,我用如下定义,你可以更改里面的类型,以适应自己的需要:

typedef int USER_TYPE;

// 定义一个控制二维数组(矩阵)的“控制头”,由三个成员组成

typedef struct MATRIX

{

USER_TYPE *data; // 真正用来存储二维数组元素的空间

int Row; // 二维数组行数

int Col; // 二维数组列数

}MATRIX;

MATRIX *initMatrix(int row, int col); // 初始化二维数组

USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下标的元素

void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 给指定下标的元素赋值

void destroyMatrix(MATRIX *matrix); // 销毁二维数组

void destroyMatrix(MATRIX *matrix)

{

free(matrix-data);

free(matrix);

}

void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val)

{

matrix.data[i*matrix + j] = val;

}

USER_TYPE getElementAt(MATRIX matrix, int i, int j)

{

return matrix.data[i*matrix.Col + j];

}

MATRIX *initMatrix(int row, int col)

{

MATRIX *mp;

mp = (MATRIX *)malloc(sizeof(MATRX));

mp-data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * row * col);

mp-Row = row;

mp-Col = col;

return mp;

}

把上面的函数当成工具,完成二维数组初始化、赋值、取值等一系列操作,如果需要比较,还需要编写比较的函数。

C语言 如何动态创建二维数组

这样的方法可行,不过要是题目要求输入m和n,然后再定义二维数组a[m][n],那就行不通了。

你可以这样做:(以int型为例)

int **a;

int m,n,i;

scanf("%d%d",m,n);

a=(int**)malloc(m*sizeof(int*)); /*malloc函数在stdlib.h里面,用的时候加入这个头文件*/

for(i=0;im;i++)

a[i]=(int*)malloc(n*sizeof(int));

/*这样以后你就可以把a当作二维数组a[m][n]来用了。。

c语言怎么创建二维数组

int a[m][n];//就表示一个m行n列的整型二维数组

在c语言中数组的下标是从0开始的所以,数组a的元素个数可以表示为:a[0][0]-a[m-1][n-1]

例如:

#includestdio.h

int main()

{

int a[3][2],i,j;//定义一个3行2列的整型二维数组a 

for(i=0;i3;i++)//依次给二维数组赋值 

for(j=0;j2;j++)

scanf("%d",a[i][j]);

printf("\n");

for(i=0;i3;i++){//输出二维数组 

for(j=0;j2;j++)

printf("%d ",a[i][j]);

printf("\n");

}

return 0;

}

/*

运行结果:

1 2

3 4

4 5

1 2

3 4

4 5 

*/


网站名称:c语言函数中创建二维数组 c语言定义二维数组
网页URL:http://ybzwz.com/article/doesigs.html