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

C语言 定义一个函数,可以求得一个int型数据32位中1的个数
include <stdio.h>int func(unsigned long x){ int countx = 0; while(x) { countx++; x = x&(x-1); } return countx;} int main(void) {unsigned long x;scanf("%lu",&x);printf("%d\\n",func(x));return 0;} ...

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

c语言中如何自定义数组长度
动态分配的数组可以自定义数组的长度,示例如下:include <stdio.h>#include <string.h>#include <stdlib.h>int main(){printf("输入要分配的内存大小:");int size;scanf("%d", &size); \/\/输入自定义的数组长度int *pstart = (int *)malloc(sizeof(int) *size);if (pstart==0) {printf...

C语言:只定义一个递归函数,求Fibonacci数列前35项的和;主函数中只用一...
代码文本:include "stdio.h"int Sum_Fib(int n,int a=1,int b=1){ return n>1 ? b+Sum_Fib(n-1,b,a+b) : 1;} int main(int argc,char *argv[]){ printf("SUMF(35) = %d\\n",Sum_Fib(35));return 0;}

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

JavaScript 如何定义一个二维数组
方法二:定义未知长度的二维数组 var tArray = new Array(); \/\/先声明一维数组 for(var k=0;k<i;k++) \/\/一维数组长度为i,i为变量,可以根据实际情况改变 { tArray[k]=new Array(); \/\/声明二维,每一个一维数组里面的一个元素都是一个数组 for(var j=0;j...

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

c语言:在main函数中,定义一个含N个元素的数组,其中N是符号常量,然后编 ...
你看看是这个吧,常量N定义的是10 define N 10 include<stdio.h> void main(){ void sr(int a[]);void sc(int a[],int m);void js(int a[],int *max,int *min);void px(int a[]);int a[N],m,max,min;\/***\/ printf("输入一个数m ");scanf("%d",&m);sr(a);sc(a,...

【c语言】定义一个使用指针的函数,实现交换数组a和数组b中的元素
你原代码函数那样写是实现不了数组交换的,我用你的代码小做修改。你看下吧。说明:^=只是利用异或来实现2个地址的数值交换,和你定义一个变量做交换是一个效果。include <stdio.h>#include <stdlib.h>void change(int *p1,int *p2,int len){ while(len--) *p1^=*p2,*p2^=*p1,*p...

市南区18340754255: 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]来用了..

市南区18340754255: 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); }

市南区18340754255: C语言如何定义一个N行N列的二维数组任意输入数据 -
蛮都凯特: 对,数组下标是一个确定的值.但最好用define 定义数组下标,因为这样修改数组长度很方便

市南区18340754255: c语言中如何定义一维数组和二维数组? -
蛮都凯特: 一维数组: 类型说明符 数组名[常量表达式] 例如 int a[10]它表示数组名为a,此数组有10个元素 二维数组: 数组名[下标][下标] 如 a[2][3] 下标可以是整形表达式如a[2-1][2*2-1]不能写成a[2,3]a[2-1,2*2-1]

市南区18340754255: 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;

市南区18340754255: c语言怎么定义二维数组 -
蛮都凯特: #include#define N 3#define M 4void main(){ int a[N][M]; int b[M][N]; int i,j; for (i=0;i<M;j++) { scanf("%d", } }...

市南区18340754255: c语言中怎么定义二维数组 -
蛮都凯特: 二维数组和一维数组区别不是很大,比如一维数组是a[5] 那么二维是a[5][5] 同理,三维数组a[5][5][5],

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

市南区18340754255: C语言中如何定义动态二维数组并输出 -
蛮都凯特: 可以按照下面步骤进行定义二维数组并输出: 1 定义二维指针. 2 确定数组维数,即行数和列数. 3 申请行数个一维指针大小空间,并赋值给二维指针. 4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针. 5 输入或赋值数...

市南区18340754255: 单片机C语言如何定义2维数组 -
蛮都凯特: 跟C语言一样呀:比如 unsigned char ary[10][10]; unsigned char * ary[10]; 这些都可以是二维数组.

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