C语言中关于二维数组的问题

我是初学者。我想问,对于用指针表示的二维数组,比方说定义float (*a)[5],请问,对于这样的数组,我怎么知道它有多少行多少列?(我觉得是5列),如果要写个代码,计算每行的值的总和,应该怎么写?
楼下的点醒了我,若是拓展一下,求每一列的总和呢?...- -||

float (*a)[5]是定义了一个指向数组的指针,如果要把它当成二维数组的话,相当于列数为5,行数可以动态分配。如:
float (*a)[5];
int n = 2; //定义行数为2
a = new float[n][5];
int sum = 0;
for (int i=0; i<n; i++)
{
for (int j=0; j<5; j++)
{
sum = sum + a[i][j];
}
}
delete[] a;追问

请问,new float[n][5]中的n是由输入的元素的长度而决定的吗?

追答

float (*a)[5] ,可以把a看成一个一维数组,它的元素是“含有5个元素的数组”

追问

对了,若是随机输入的一串数字呢?怎么定义n?
嗯,我想到了,直接定义new float[][5],然后就可以了,对吗?

追答

这么定义就是为了可以动态分配内存,n是可以动态分配的,要看你的实际应用了,跟你输入的元素多少没什么关系。你到底是想实现什么?

追问

我想实现的是,给定义好的二维数组随机输入一串数字,然后求每一列和每一行的和(那串数字的长度不确定,所以我才头疼),原始的是(*a)[5],这个倒是给定的了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-13
对于你定义的这个数组,它表示有5个float*类型的指针,也就是说它定义了一个二维数组,这个数组有5行,这5行的首地址分别为a[0],a[1],a[2],a[3],a[4],但是没有给每一行具体分配空间,所以还不能说它有多少列,你要为每一行分配空间之后再赋值,然后才能计算行和追问

一维数组中还可以用strlen测试数组长度,那么二维数组,能怎么办?如果我是随机输入一串数字,这样该怎么求和?

第2个回答  2012-04-13
float f=0;
for(int n=0;n<5;n++)
{
if(a[n])
f=f+*a[n];
}追问

请问,若是求列向量的和呢?因为楼下有人说,这样定义是不知道数组有几列的...

第3个回答  2012-04-13
float (*a)[5]; 是说a为指向含5个元素的一位数组的指针变量。

求和:
#include<stdio.h>
main()
{
int a[4] = {2,3,4,5};
int i,sn = 0;

for(i = 0;i < 4;i++)
{sn += a[i];}
printf("%d\n",sn);
}