c 二维数组定义(c语言中什么是二维数组)
本文目录
- c语言中什么是二维数组
- C语言中如何定义动态二维数组并输出
- c语言关于定义二维数组的问题
- 在C中如何定义一个动态的二维数组
- c语言怎么定义二维数组
- C语言 定义二维数组
- C语言二维数组定义是什么,然后int a[1][2]是代表什么意思怎么用这个二维数组
c语言中什么是二维数组
二维数组的定义
二维数组定义的一般形式是:
类型说明符 数组名[常量表达式1][常量表达式2]
其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:int a;
说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:
a, a, a, a
a, a, a, a
a, a, a, a
二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。
在C语言中,二维数组是按行排列的。即,先存放a行,再存放a行,最后存放a行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。
C语言中如何定义动态二维数组并输出
intmain()
{
int**p;//定义二维指针。
intm,n;//行数和列数。
inti,j;
scanf(“%d%d“,&m,&n);//输入行数和列数。
if(m《=0||n《=0)return-1;//行数或列数非法。
p=(int**)malloc(sizeof(int*)*m);//申请一组一维指针空间。
for(i=0;i《m;i++)
p[i]=(int*)malloc(sizeof(int)*n);//对于每个一维指针,申请一行数据的空间。
for(i=0;i《m;i++)
for(j=0;j《n;j++)
scanf(“%d“,&p[i][j]);//输入第i行第j列的数据。其中&p[i][j]也可以写作p[i]+j或者是*(p+i)+j.功能相同。
printf(“输入的数组为%d行%d列:\n“,m,n);
for(i=0;i《m;i++)
{
for(j=0;j《n;j++)//这个循环可以输出一行元素。
printf(“%d“,p[i][j]);//输出i行j列的元素。
printf(“\n“);//每行输入结束加换行符。
}
//释放内存
for(i=0;i《m;i++)
free(p[i]);
free(p);
return0;
}
扩展资料
c语言中通过函数传递二维数组
#include
void func(int n, int a[size])
{
/* access array */
a[i][j];
}
void main()
{
int a;
func(10, a);
}
c语言关于定义二维数组的问题
首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a所表达的意思,是指二维数组a的每一维都是由4个元素组成的一维数组.而编译器可以根据你赋给a的初值个数计算它的第一维长度(元素总个数/4,如果不能整除,则长度加1,此时还应该有几个没有赋初值的数组元素).而a的意思从表面上看可以成立,但问题是编译器不能直接识别其第二维的确切长度(你可以考虑,如果总的初值个数为2时,可以认为a的第二维长度为1,也可以是2,.......),这样就会产生错误.所以,可以a={*,*,*……}这样定义,而不能定义a={*,*,*……}。
对于你补充的问题,其实我已经讲了.因为赋初值是5个元素,所以5/4=1,但除不尽,所以要加1,即实际数组a实质上定义为a,其内元素为:
1 2 3 4
5 0 0 0 (后面的三个0是系统默认值)
希望对你有所帮助.^-^
在C中如何定义一个动态的二维数组
一般来讲两种办法:
第一种:连续内存分配
#include “stdio.h“
#include “stdlib.h“
int main()
{
int x,y;
int *p;
scanf(“%d%d“,&x,&y);
p=(int *)malloc(x*y*sizeof(int));
.....//这样定义要访问第i行第j列应该用*(p+i*y+j)
free(p);
return 0;
}
第二种:通过指针数组+二级指针
#include “stdio.h“
int main()
{
int x,y;//x行y列
int i,j;
int **p;
scanf(“%d%d“,&x,&y);
p=(int **)malloc(x*sizeof(int*));
if(p==NULL)//分配失败
{
//printf(“内存分配失败!\n“);
exit(0);
}
for(i=0;i《x;i++)
{
p[i]=(int *)malloc(y*sizeof(int));
if(p[i]==NULL)//分配失败
{
//printf(“内存分配失败!\n“);
for(j=0;j《i;j++)
free(p[j]);
free(p);
exit(0);
}
}
........//访问第i行第j列:p[i][j]
for(i=0;i《x;i++)//释放内存
free(p[i]);
free(p);
return 0;
}
推荐第二种。。比第一种灵活。
其它几位回复者注意要求用C而不是CPP,并且考虑到C规定变量定义放在所有语句之前。
c语言怎么定义二维数组
#include《stdio.h》
#define N 3
#define M 4
void main()
{
int a[N][M];
int b[M][N];
int i,j;
for (i=0;i《N;i++)
{
for (j=0;j《M;j++)
{
scanf(“%d“,&a[i][j]);
}
}
for (i=0;i《N;i++)
{
for (j=0;j《M;j++)
{
printf(“%5d“,b[i][j]);
}
printf(“\n“);
}
for(i=0;i《N;i++)
{
for(j=0;j《M;j++)
{
b[j][i]=a[i][j];
}
}
for (i=0;i《M;i++)
{
for (j=0;j《N;j++)
{
printf(“%5d“,b[i][j]);
}
printf(“\n“);
}
}
C语言 定义二维数组
首先你得知道C语言中其实都是一维数组好了,然后你得知道不给明确元素的值时[ ] 里面必须是常量,如 int ,否则你就得把它中得元素写出来,如int={1,2} .好了,那么二维数组实际也是一维数组,a中第一个a表示我是一个数组,有两个元素,然后这两个元素也是数组类型的。这个题目太简单,A,C可以扔了,B理解了上述也可以扔,答案就是D了,其实a={(1,2),(3,4)也是对的。。
C语言二维数组定义是什么,然后int a[1][2]是代表什么意思怎么用这个二维数组
C语言二维数组定义的一般形式是:类型说明符 数组名[常量表达式1][常量表达式2]
int a的意思是,定义了一个int类型的,数组名为a的,具有1行2列的数组
你可以把这个二维数组想像成一个表格,这个表格有1行2列,每个格子中可以放入一个int型数据。
数组使用就是用数组下标来访问数组中的元素,比如a=5,就是把第1行的第2个元素赋值为5。