繁体   English   中英

将结构数组的元素传递给函数

[英]Passing an element of an array of structs to a function

我尝试了这段代码,但是没有用。 我只想将struct grid的元素p发送给struct grid ,而不是整个结构。

struct grid{ 
  int p; 
  int s; 
}

void create(int a[9][9]); 
{ 
  a[0][2] = 4; 
}

int main() 
{
  struct grid a[9][9]; 
  create(a.s); 
}

您基本上有三个选择,切换到两个矩阵,将维放入结构中,或者让create()接受结构数组:

两个数组:

void create(int a[9][9]) 
{ 
  a[0][2] = 4; 
}

int main() 
{
  int p[9][9];
  int s[9][9]; 
  create(s); 
}

-或- 将尺寸放入结构中:

struct grid{ 
  int p[9][9]; 
  int s[9][9]; 
};

void create(int a[9][9])
{ 
  a[0][2] = 4; 
}

int main() 
{
  struct grid a; 
  create(a.s); 
}

-或- 传递一个struct数组

struct grid{ 
  int p; 
  int s; 
};

void create(struct grid[9][9] * a) 
{ 
  (*a)[0][2].s = 4; 
}

int main() 
{
  struct grid a[9][9]; 
  create(&a); 
}

您不能从结构的数组或矩阵中挑选元素

正如其他人指出的那样,您所需的东西无法以这种方式完成。 解决此问题的一种方法是在将矩阵传递给方法之前对其进行转换:

using namespace std;

struct grid{ 
    int p; 
    int s; 
};

void create(int a[9][9])
{ 
    a[0][2] = 4; 
}

void ExtractS(struct grid a[9][9], int s[9][9])
{
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++)
            s[i][j] = a[i][j].s;
}

int main() 
{
    struct grid a[9][9]; 
    int s[9][9];
    ExtractS(a, s);
    create(s);
}

但这带来了更多的问题,而不是答案:

  • 数据将必须返回到原始结构矩阵中,否则将丢失通过create进行的更改
  • 这种方法效率很低,因为它会复制所有数据

也许您应该修改设计,并使create函数接收grid元素的矩阵。

最初的注意: void create(int a[9][9])实际上变成了
void create(int a[][9])void create(int (*a)[9])

您可能需要void create(int (&a)[9][9])

由于您拥有struct grid { int p; int s; }; struct grid { int p; int s; }; struct grid a[9][9];

您应该这样初始化:

void create(grid (&g)[9][9])
{
    g[0][2].s = 4;
}

或将您的结构更改为

struct grid {
    int p[9][9];
    int s[9][9];
};

然后有

void create(grid &g)
{
    g.s[0][2] = 4;
}

要么

void create(int (&a)[9][9])
{
    a[0][2] = 4;
}

您分别调用create(g)create(gs)

您正在将一个整数传递给一个函数,该函数需要一个指向2D array的指针作为参数,

接受结构grid的成员变量s作为参数的函数原型如下:

void create(int a); 

此外,函数定义中的程序中还会有多余的分号。

void create(int a[9][9]); <-- No need
{ 
    a[0][2] = 4; 
}`
`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM