我尝试了这段代码,但它不起作用。我只想发送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);
}
答案 0 :(得分:1)
你基本上有三个选择,切换到两个矩阵,将维度放在结构中,或者让create()
取一个struct数组:
两个阵列:
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);
}
你不能从数组或结构矩阵中挑选元素
答案 1 :(得分:1)
正如其他人指出的那样,你不能以这种方式做到。解决该问题的一种方法是在将矩阵传递给方法之前对其进行转换:
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
元素的矩阵。
答案 2 :(得分:1)
初步说明:
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 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(g.s)
。
答案 3 :(得分:0)
您正在将一个整数传递给一个函数,该函数需要一个指向2D array
的指针作为参数,
接受结构s
的成员变量grid
作为参数的函数的原型应该如下,
void create(int a);
在函数定义中,程序中还有一个不需要的分号。
void create(int a[9][9]); <-- No need
{
a[0][2] = 4;
}`
`