当前位置:首页 » 编程语言 » c语言动态构造数组
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言动态构造数组

发布时间: 2023-06-26 08:19:09

A. 用c语言,动态创建m*n的数组

用malloc来实现:
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
*(p+m*i+j)就相当于数组的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以实现对数据赋值
使用完释放free(p)
下面是我写的一个例子:
#include<stdio.h>
int
main(void)
{
int
m,n;
int
i,j;
int
*p;
scanf("%d%d",&m,&n);
p=(int
*)malloc(sizeof(int)*m*n);
//*(p+m*i+j)就相当于数组的i行j列的元素
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(p+m*i+j)
=
i*j;//可以实现对数据赋值
for(i=0;i<m;i++)
for(j=0;j<n;j++)
printf("%d
",*(p+m*i+j));
free(p);
system("PAUSE");
return
0;
}

B. 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. c语言 动态数组

#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,*p=0,i;
printf("输入数组元素个数:");
/*输入数组元素个数,保存到变量num中*/
scanf("%d",&num);
/*动态分配数组存储空间*/
p = (int *)malloc(sizeof(int)*num);
/*输入数据*/
for(i=0;i<num;i++)
{
scanf("%d",&p[i]);
}
/*输出数据*/
for(i=0;i<num;i++)
{
printf("%d ",p[i]);
}
/*删除动态创建的数组*/
free(p);
return 0;
}

D. c语言怎样采用动态方法创建数组

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

int main(void)
{

int *p;
int num;//数组的大小
int i = 0;

printf("数组的大小:");
scanf("%d",&num);

p = malloc(sizeof(int)*num);

for(;i<num;i++)
p[i]=i;

i = 0;

for(;i<num;i++)
printf("%d ",p[i]);
printf(" ");

return 0 ;

}

E. C语言动态数组结构的编程练习

#include<stdio.h>

#defineMAXNAME30
#defineMAXPHONE15
structTeleType
{
charname[MAXNAME];
charphoneNum[MAXPHONE];
structTeleType*prevaddr;/*这里添加*/
structTeleType*nextaddr;
};

voiddisplay(structTeleType*);/*functionprototype*/

intmain(intargc,charconst*argv[])
{
structTeleTypet1={"Acme,Sam","(555)8982392"};
structTeleTypet2={"Dolan,Edith","(555)6823104"};
structTeleTypet3={"Lanfrank,John","(555)7184581"};
structTeleType*first;/*createapointertoastructure*/
structTeleType*last;/*pointertothelast这里添加*/

first=&t1;/*storet1'saddressinfirst*/
t1.nextaddr=&t2;/*storet2'saddressint1.nextaddr*/
t1.prevaddr=NULL;/*添加*/
t2.nextaddr=&t3;/*storet3'saddressint2.nextaddr*/
t2.prevaddr=&t1;/*添加*/
t3.nextaddr=NULL;/*storetheNULLaddressint3.nextaddr*/
t3.prevaddr=&t2;/*添加*/
last=&t3;/*storet3'saddressinlast这里添加*/
display(last);/*修改*/
return0;
}

voiddisplay(structTeleType*contents)/*contentsisapointer*/
{/*toastructureoftypeTeleType*/
while(contents!=NULL)/*displaytillendoflinkedlist*/
{
printf("%-30s%-20s ",contents->name,contents->phoneNum);
contents=contents->prevaddr;/*getprevaddress这里修改*/
}
}

输出:

Lanfrank,John(555)7184581
Dolan,Edith(555)6823104
Acme,Sam(555)8982392

F. c语言动态数组是如何建立和使用的

动态数组,用指针和malloc()函数建立,用realloc()动态调整大小,最后用free()释放内存。引用与数组一样。

G. C语言 动态构造 二维数组

你的空间申请有问题,这是帮你改好后的,你可以运行看看。不着调是否帮上你了,如果OK还望采纳,和而后~~ #include <stdio.h>
#include <stdlib.h>void main()
{
int n,i=0,j=0;
int **p;
printf("?????????:");
scanf("%d",&n);
//p=(int**)malloc(sizeof(int)*n*n);
p=(int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);for(j=0;j<n;j++)
{
scanf("%d",&p[i][j]);
//printf("%d",p[i][j]);
}
}for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",p[i][j]);
}
printf("\n");
}
system("pause");
}

H. C语言 用函数来创建动态数组,怎么实现

应该这样
void CreateArray(int n, int** a)
{
*a = (int *) malloc (sizeof(int) *n);

}

I. 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;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));

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

J. 使用C语言实现动态数组

你的太乱了的吧磨昌
二维数瞎颤扒组,其实实质是一位数组横排
为啥用两个for循环,我看了会头晕,洞行你的太乱了
#include<stdio.h>
#include<malloc.h>
int main()
{
int *p;
int m,n;
scanf("%d%d",&m,&n);
p = (int*)malloc(sizeof(int)*m*n);
for(int i=0;i<(m*n);i++)
{
scanf("%d",p+i);
}
for( i=0;i<(m*n);i++)
{
print(“%d ”,p+i)
if((i+1)%4==0)
printf("\n");
}
希望对你有帮助