传递给函数时如何访问二维结构数组中的所有成员?

How access all members in a 2D array of structures when it is passed to a function?

#include<stdio.h>
#include<string.h>

struct name
{
  char a[20];
  double s;
};
void print(struct name v[][10],int row,int col)
{ 
    int i,j;
    for( i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++){
            printf("%lf\n ",v[i][j].s );
        }
    }
}

int main()
{
  int m,n,i,j;
  scanf("%d %d",&m,&n);
  struct name v[m][n];
  for(i=0;i<m;i++)
    for(j=0;j<n;j++)
     scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
  print(v,m,n);
   return 0;   
}

在上面的程序中,我想打印二维结构数组中的所有成员 (v),但我无法打印第一行以外的元素(其余行元素打印为 0) . 谁能帮忙打印除第一行以外的其他成员?

出现此问题是因为您在 print 函数中声明参数的方式:

void print(struct name v[][10],int row,int col)
                        ^^^^^^

由于最里面的维度 10,在 print() 函数中, v 将被视为列数为 10 的二维数组,当您尝试打印时如果 col 的值不是 10,您将无法获得预期的输出。只需尝试一次将值 10 赋给 n 并检查程序的输出,您将获得预期的输出。

要解决此问题,请更改 print() 函数参数的顺序并将 10 替换为 col

void print(int row, int col, struct name v[][col])

这样称呼它

print(m, n, v);

另外,scanf()格式字符串中不需要\n

scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
             ^^

删除它。