[英]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
函数接收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.