首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当一个2D结构数组被传递给一个函数时,如何访问它的所有成员?

当一个2D结构数组被传递给一个函数时,如何访问它的所有成员?
EN

Stack Overflow用户
提问于 2018-08-05 19:17:06
回答 1查看 91关注 0票数 0
代码语言:javascript
复制
#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;   
}

在上面的程序中,我想打印2d结构数组(v)中的所有成员,但我无法打印除第1行以外的其他元素(剩余的行元素打印为0)。有没有人可以帮我打印第一行以外的成员?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-05 20:02:29

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

代码语言:javascript
复制
void print(struct name v[][10],int row,int col)
                        ^^^^^^

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

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

代码语言:javascript
复制
void print(int row, int col, struct name v[][col])

这样叫它

代码语言:javascript
复制
print(m, n, v);

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

代码语言:javascript
复制
scanf("%s %lf\n",v[i][j].a,&v[i][j].s);
             ^^

去掉它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51693815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档