Я пытаюсь закодировать сложную вещь в C/C++. У меня есть указатель 2D-массива внутри структуры, и я хотел бы передать адрес i-го (в примере ниже 3-й) строки 2D-массива в качестве указателя на другую структуру.Передача 2D-массива внутри структуры в другую структуру
Вот код:
main.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct
{
unsigned int t1[5][10];
} TEST1;
typedef struct
{
unsigned int * t2;
}TEST2;
TEST1 a;
TEST2 b;
unsigned int test2(unsigned int * data)
{
int i,j,k;
k=0;
for(i=0;i<5;i++)
{
for(j=0;j<10;j++)
{
a.t1[i][j]=k;
cout << a.t1[i][j] << " ";
k++;
}
cout << endl;
}
data = &(a.t1[3][0]);
cout << *data << endl;
return 10;
}
void test()
{
unsigned int size,i;
size = test2(b.t2);
cout << (b.t2) << endl;
}
int main()
{
test();
return 0;
}
Выход для кода:
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
30
0
Почему печать "данные" внутри дает мне правильный ответ и печать «b.t2» дает мне 0? Похоже, что «данные» не передаются в качестве ссылки на «b.t2»
Вместо этого данные = & (a.t1 [3] [0]); вы можете использовать как * data = (a.t1 [3] [0]); означает, что вы получите правильный результат. –
Если 'data' изменяется как отдельный экземпляр, как вы ожидаете' b.t2', который не указывает на какое-либо допустимое местоположение для хранения этого измененного значения? – Gopi
Круто, ребята, я понял это. Спасибо за ответы. На самом деле я должен сделать test2() вернуть адрес, верно? –