Я пробовал этот код, но он не работает. Я хочу отправить только элемент 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);
}
Начальное примечание: 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)
.
У вас в основном есть три варианта, переход на две матрицы, поместить измерения в структуру или 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 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
.
int
вместо этого, если бы просто int
, таким образом, изменения не были потеряны, но область видимости может быть проблемой.
Вы передаете целое число функции, которая ожидает указатель на 2D array
в качестве аргумента,
Прототипом функции для принятия переменной-члена s
структурной grid
качестве аргумента должно быть следующее:
void create(int a);
Также в определении функции есть нежелательная точка с запятой.
void create(int a[9][9]); <-- No need
{
a[0][2] = 4;
}'
'
;
Тхо.
struct
также есть пропущенная точка с запятой.
int
,int[][9]
- это два разных типа. Вы не можете смешивать. Чтобы получить доступ к членам массива, вам нужно использовать оператор[]
.