C语言中如何定义一个二维数组,数组长度由输入值确定?

作者&投稿:张促 (若有异议请与网页底部的电邮联系)
C语言怎么定义一个二维数组可以使每行的输入长度任意~

1、使用动态数组可以实现变长度数组。建动态数组,其他就像数组一样使用就行了。

2、例程:
int row=0; //函数int col=0; //列数int i;int ** arr=NULL; //下面假设存储的数据类型为intprintf(“请输入二维数组的行数和列数:”);scanf("%d%d",&row,&col);//要不要加判断输入是否合法你自己决定,这里就不加,arr = (int **)malloc(sizeof(int*)*row); //arr在这里可以看出成数组,数组的每个成员都是指向int类型的指针,这样每个指针指向的代表一行,共row行 for(i=0; i<row; i++) //为每行申请空间{ arr[i]=(int*)malloc(sizeof(int)*col); //每一行有col列}之后就可以用a[i][j]的形式访问二维数组了

数组的长度是固定的,即定义a时,n必须是常量.
由外部输入的变量决定数组的长度的思想存在安全意识的疏忽,如果你是为了节省空间,就定义指针好了,空间可以随你变:)

可以通过malloc()函数动态分配,示例:

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
typedef int datatype;

datatype **na(const int m,const int n) /*创建一个m行n列的datatype类型数组,返回首地址,如果创建失败则返回NULL*/
{
int i;
datatype **a=(datatype**)malloc(sizeof(datatype *)*m);
if (!a) {
return NULL;
}
else
for (i = 0; i<m; i++) {
a[i]=(datatype*)malloc(sizeof(datatype)*n);
if (!a[i]) {
return NULL;
}
}
return a;
}

void dela(datatype **a,const int m) /*删除用na()函数创建的并且有m行元素的二维数组a*/
{
int i;
for (i = 0; i<m; i++)
free(a[i]);
free(a);
}
int main(void)
{
datatype **dta=na(3,2); /*创建一个3行2列的datatype数组*/
int i,j;
if (!dta) { /*如果创建失败,则输出错误信息并结束程序*/
fprintf(stderr,"MEMORY ERROR\n");
return -1;
}
else
{
for (i=0; i<3; i++) { /*使用刚才创建的二维数组*/
for (j=0; j<2; j++) {
dta[i][j]=i*j;
printf("%d ",dta[i][j]);
}
putchar('\n');
}
}
dela(dta,3); /*动态创建的数组要手动删除*/
return 0;
}
//---------------------------------------------------------------------------

int
main()
{
int
iLen;
int
*p=NULL;
int
i;
scanf("%d",&iLen);
if(iLen
<=
0)
{
printf("数组大小不能小于1!\n");
return
-1;
}
p=
(int
*)
malloc(iLen*sizeof(int));
if(p
==
NULL)
{
printf("内存分配错误!\n");
return
-1;
}
for(i
=
0;i
评论
0
0
0
加载更多

int main()
{
int iLen;
int *p=NULL;
int i;
scanf("%d",&iLen);
if(iLen <= 0)
{
printf("数组大小不能小于1!\n");
return -1;
}
p= (int *) malloc(iLen*sizeof(int));
if(p == NULL)
{
printf("内存分配错误!\n");
return -1;
}
for(i = 0;i<iLen;i++)
{
p[i]=i;
}
for(i=0;i<iLen;i++)
{
printf("Array[%d]=[%d]\n",i,p[i]);
}
return 0;
}

不可以,数组在定义的时候必须先给定大小。

不可以
用链表完成类似功能


C语言定义一个结构体变量(包括年、月、日),输入一个日期,计算该日在本...
\/\/希望我的回答对你的学习有帮助#include <stdio.h>struct ymd { int Y,M,D; }; const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int YMD_2_JD(int Y, int M, int D){ const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; ...

JAVA中类是什么意思?如何定义一个类?
这个真的不太好解释,类这个概念几乎贯穿了整个java,其实这个概念贯穿了所有的面向对象的程序语言。你可以把类看成是蓝图,设计图,对一类事物或者意图的某些方面的描述。比如你要描述一种汽车,当然汽车有太多的属性了,但你在意的恐怕只有几种而已。怎么定义一个类,就是使用class关键字来定义,给你看...

如何在java中定义一个结构体
像C\/C++里的,第三方的Javolution库提供了类似的解决方案:enum Gender{MALE, FEMALE}; struct Date { unsigned short year; unsigned byte month; unsigned byte day; }; struct Student { enum Gender gender; char name[64]; struct Date birth; float grade...

c++中如何定义一个字符串类型的变量
一般的方法就是和C语言中的一样,但是C语言中没有关于字符串的定义,在C中要定义字符串必须使用数组或者指针,如 char a[10];或者 char *a = “sfg”;但在C++中有一种更简单的方法,那就是string类, 可直接定义字符串, 例如string s("fsdfsdafs"); 而且他的好处是字符串 的长度是...

如何用java语言编写一个计算圆的面积的程式?
如何用java语言编写一个计算圆的面积的程式? 假设这个圆的类名叫做Circle,因为根据圆的半径就可以求出圆的周长和面积,所以可以在这个类中定义一个半径属性mRadius,然后定义两个方法getLength和getArea分别实现计算圆周长和面积的功能。java语言原始码如下:public class Circle{ 获取圆的面积 pub...

在VB中怎么定义一个16进制的变量呢?
在VB中一个变量是无法定义成16进制的。 但Const 语句可声明一个16进制常量: 1 Const hexStr = &H459 '声明了一个16进制常量&H469,其十进制值是1113 适当范围内的数字,前缀以 &H,可以直接表示十六进制数字。例如,十六进制表示法的 &H10 代表十进制的 16。 本回答由电脑网络分类达人 系统推荐 举报| 答案纠...

C语言结构体定义
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的...

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输...
可以在外部定义结构体类型,然后在主函数内部定义该类型的变量。在输入输出函数调用时,以结构体变量指针做为参数传递。参考代码如下:include <stdio.h>struct test{ int a;};\/\/定义结构体类型struct test。void input(struct test* p)\/\/输入函数,以指针作为参数。{ scanf("%d",&p->a);}...

在C语言编程中,定义一个数组时要不要初始化?
(1)在定义数组时对数组元素赋以初值。如:static int a[10]={0,1,2,3,4,5,6,7,8,9};经过上面的定义和初始化后,a[0]=0,a[1]=1,… ,a[9]=9。(2)初始化时可以只对一部分元素赋初值。例如:static int a[10]={0,1,2,3,4};定义的数组有10个元素...

MATLAB中如何定义一个矩阵。。
可以用定义数组的命令 cells(m,n)定义的是m*n维的矩阵 也可以直接定义矩阵 比如定义一个3×3的矩阵 A=(x11,x12,x13;x21,x22,x23;x31,x32,x33)

江陵县13372126251: 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]来用了..

江陵县13372126251: C语言怎么宏定义一个2维数组 -
勾健迈力: 如果要强调是二维数组,这样也许更合适些 1 2 3 4 5 6C/C++ code?#define M 80 #define N 100 #define ARRAY(A,M,N) A[M][N] charARRAY;

江陵县13372126251: C语言如何定义一个N行N列的二维数组任意输入数据 -
勾健迈力: 对,数组下标是一个确定的值.但最好用define 定义数组下标,因为这样修改数组长度很方便

江陵县13372126251: C语言中如何定义一个二维数组 -
勾健迈力: #include <stdio.h> main( ) { int a[3][3]={{1,2,3},{2,3,4},{4,5,6}}; int i,j,total=0; for (i=0;i<3;i++) { for (j=0;j<3;j++) { printf("%d\t",a[i][j]); if (i==j) { total+=a[i][j]; } } printf("\n"); } printf("total=%d\n",total); }

江陵县13372126251: C语言结构体定义二维数组? -
勾健迈力: 自定义的一个类型,意思是这个结构体的二维数组 AdjMatrix arcs; 等效于 struct ArcCell arcs[MAX_NUM][MAX_NUM];

江陵县13372126251: c语言中怎么定义二维数组 -
勾健迈力: 二维数组和一维数组区别不是很大,比如一维数组是a[5] 那么二维是a[5][5] 同理,三维数组a[5][5][5],

江陵县13372126251: c语言中如何定义一维数组和二维数组? -
勾健迈力: 一维数组: 类型说明符 数组名[常量表达式] 例如 int a[10]它表示数组名为a,此数组有10个元素 二维数组: 数组名[下标][下标] 如 a[2][3] 下标可以是整形表达式如a[2-1][2*2-1]不能写成a[2,3]a[2-1,2*2-1]

江陵县13372126251: c语言关于定义二维数组的问题 -
勾健迈力: 首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a[][4]所表达的意思,是指二维数组a的每一维都是由4个元素组成的一维数组.而编译器可以根据你赋给a的初值个数计算...

江陵县13372126251: C语言关于构建二维数组 -
勾健迈力: 你对二维数组的认识有误 二维数组,不是存储两类数据的,其中只能存储一种类型数据,只是在我们研究的观察中,它体现的是一种列表形式!char a[10][20] ; //这其中只能存储10个名字,如果还想存储年龄,需要再定义一个数组 int age[10]; //这样通过序号就可以对应到每个人了!//当然,还可以定义成结构体,更方便 struct per { int age; char name[20]; } a[10] ; //这样,就达到你的原始想法了

江陵县13372126251: C语言中如何定义一个二维数组,数组长度由输入值确定? -
勾健迈力: int main() { int iLen; int *p=NULL; int i; scanf("%d",&iLen); if(iLen <= 0) { printf("数组大小不能小于1!\n"); return -1; } p= (int *) malloc(iLen*sizeof(int)); if(p == NULL) { printf("内存分配错误!\n"); return -1; } for(i = 0;i 评论 0 0 0 加载更多

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网