重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
嗯 在C语言中直接用int声明数组是不可以的(C标准这样规定。即使在某个编译器上这样做成功了,也不建议这样做,程序应该符合规范)。
公司主营业务:成都网站制作、成都网站建设、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出山城免费做网站回馈大家。
如果你想在程序运行的时候输入矩阵的大小,可以用malloc在堆区动态分配内存实现,具体做法如下:
#include "stdio.h"
void main(){
int row;
int col;
scanf("%d%d",row,col);
int** matrix=(int**)malloc(row*sizeof(int*));
int i=0;
for( ;irow;++i){
matrix[i]=(int*)malloc(col*sizeof(int));
}
for(i=0;irow;++i){
int j=0;
for( ;icol;++j){
printf("input matrix[%d][%d]",i,j);
}
}
//以上程序实现了在程序运行的时候建立大小从键盘输入的矩阵,并然后从键盘读入每个元素的值。
排版不好。。我觉得矩阵没必要去用一维数组怎样怎样映射(当然有时候极少时候可能考虑效率需要那样做)。。。平时这样做就可以了。。
malloc声明一个二维数组, 假定行数 NR=5, 列数NC=8:
int NR=5,NC=8;
int i,j;
int **a;
// scanf("%d %d", NR, NC); 你也可以在这里输入行数,列数,然后
// 动态分配:
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;jNR;j++){
a[j] = (int *) malloc(sizeof(int) * NC);
}
// 假定这里赋初值:
for (j=0;jNR;j++) for (i=0;iNC;i++) {
a[j][i] = (j+1)*100 + i;
}
//输出数组元素值:
for (j=0;jNR;j++){
for (i=0;iNC;i++) printf("%3d ",a[j][i]);
printf("\n");
}
//释放内存的方法:
for (j=0;jNR;j++) free(a[j]);
free(a);
二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:
它们是合法且等价,也可以使用如下形式:
但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:
因为从实参传递来的是数组的起始地址,如果在形参中不说明列数,编译器将无法定位元素的的位置。
这样传:
函数声明:Func(变量类型 *[二维数组的列长] arry);
char arry[][4] ;
Func(arry);
在C语言中可以用二维数组作为实参或者形参。
1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:
void f(int array[3][10]); //正确
void f(int array[][10]); //正确
上面的两种二维数组形参表示都是正确的。
2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:
void f(int array[][]); //错误
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:
void f(int array[3][]); //错误
3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:
void f(int array[][10]);
可以将如下数组传递给函数f。
int a[2][10] = {1,2,3,4};
int b[4][10] = {1};