下列程序在主程序中初始化一个矩形并将每个单元元素输出,然后调用子函数,分别计算每一行元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。
#include<stdio.h>
void rowsum(int a[][4],int nrow)
{
for(int i=0;i<nrow;i++)
{for(int j=1;j<4;j++)
a[i][0]+=a[i][j];
}
}
void main()
{int table[3][]={{1,2,3,4},{2,3,4,5},{3,4,5,6}};错
for(int i=0;i<3;i++)
{for(int j=0;j<=4;j++)
printf("%d ",table[i][j]);
printf("\n");
}
rowsum(table[3][4],3);错
for(i=0;i<3;i++)
printf("sum of row%d is %d \n",i,table[i][0]);
getch();
}
谢谢
问题:
1,多维数组的定义,主要是分配内存的问题。
a[i][j]是数组的数组,意思是定义i个元素的数组,每个元素都是一个含有j个元素的数组. 注意:这里的i,j是具体的数字,不能是变量。
a[][4]是定义了n个含有4个元素的数组,如:a[][4]={{1,2,3,4},{5,4,3,2},{6,7,8,9}}是定义了3个"含有4个元素的数组"的数组.虽然3个自定义的,但是是确定的数字。程序可以分配内存。
a[3][]是定定义了3个"含有n个元素的数组"的数组.如:a[3][]={{1,2,3}{3,4}{5,6}},由于n的值是不确定的(如上有3个的,2个的),所以程序无法为这个数组分配内存空间.
2,对于数组下标的使用,对于一个指定下标为4的数组,他的下标是0,1,2,3,这4个,而没有4.
3,rowsum(int table[][],int nrow)
table[3][4]是一个值,你的子函数需要获得一个数组,你却传一个值,显然编译器不会答应。
在参数中直接写,table就可以将数组传入。