C++ 将结构内部的二维数组传递给另一个结构
我试图用C/C++编写一个棘手的东西。我在一个结构中有一个2D数组指针,我想将2D数组的第I行(在第3行下面的示例中)的地址作为指向另一个结构的指针传递 代码如下: main.cppC++ 将结构内部的二维数组传递给另一个结构,c++,arrays,pointers,struct,C++,Arrays,Pointers,Struct,我试图用C/C++编写一个棘手的东西。我在一个结构中有一个2D数组指针,我想将2D数组的第I行(在第3行下面的示例中)的地址作为指向另一个结构的指针传递 代码如下: main.cpp #include <iostream> #include <cstdlib> using namespace std; typedef struct { unsigned int t1[5][10]; } TEST1; typedef struct { unsigned
#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;
}
为什么内部打印“数据”会给我正确答案,而打印“b.t2”会给我0?在您的代码中,
test2()
函数中,似乎没有将“data”作为对“b.t2”的引用传递
data=&(a.t1[3][0])代码>
您试图更改数据所持有的地址,并希望在test()
中引用该更改。你不能那样做。您可以从test2()
更改data
保存的地址处的值,而不是data
本身
在test()
记住,c使用传递值<代码>数据
本身已通过值传递
如果必须更改数据
本身,则需要将指向数据
的指针传递到test2()
需要注意的是,*数据
相当于代码中的*(b.t2)
,在test2()函数中
data=&(a.t1[3][0])代码>
您试图更改数据所持有的地址,并希望在test()
中引用该更改。你不能那样做。您可以从test2()
更改data
保存的地址处的值,而不是data
本身
在test()
记住,c使用传递值<代码>数据
本身已通过值传递
如果必须更改数据
本身,则需要将指向数据
的指针传递到test2()
需要注意的是,*数据
相当于代码中的*(b.t2)
,在test2()函数中
data=&(a.t1[3][0])代码>
您试图更改数据所持有的地址,并希望在test()
中引用该更改。你不能那样做。您可以从test2()
更改data
保存的地址处的值,而不是data
本身
在test()
记住,c使用传递值<代码>数据
本身已通过值传递
如果必须更改数据
本身,则需要将指向数据
的指针传递到test2()
需要注意的是,*数据
相当于代码中的*(b.t2)
,在test2()函数中
data=&(a.t1[3][0])代码>
您试图更改数据所持有的地址,并希望在test()
中引用该更改。你不能那样做。您可以从test2()
更改data
保存的地址处的值,而不是data
本身
在test()
记住,c使用传递值<代码>数据
本身已通过值传递
如果必须更改数据
本身,则需要将指向数据
的指针传递到test2()
需要注意的是,*数据
相当于*(b.t2)
您只是将b.t2的值传递给test2
。b.t2
本身的值不会改变。当您调用cout时,它仍然为空,您只是将b.t2
的值传递给test2
。b.t2
本身的值不会改变。当您调用cout时,它仍然为空,您只是将b.t2
的值传递给test2
。b.t2
本身的值不会改变。当您调用cout时,它仍然为空,您只是将b.t2
的值传递给test2
。b.t2
本身的值不会改变。当您调用cout时,它仍然为空,因为您甚至没有打印相同的内容。在函数中打印数据指向的整数:*data
,在函数外打印指针的值b.t2
如果希望指针在函数外部更改,请传递指针的地址:
unsigned int test2(unsigned int** data)
{
...
*data = &(a.t1[3][0]);
如果现在打印b.t2
的值,它将不再为空
size = test2(&b.t2);
cout << (b.t2) << endl;
size=test2(&b.t2);
不能因为你甚至没有打印相同的东西。在函数中打印数据指向的整数:*data
,在函数外打印指针的值b.t2
如果希望指针在函数外部更改,请传递指针的地址:
unsigned int test2(unsigned int** data)
{
...
*data = &(a.t1[3][0]);
如果现在打印b.t2
的值,它将不再为空
size = test2(&b.t2);
cout << (b.t2) << endl;
size=test2(&b.t2);
不能因为你甚至没有打印相同的东西。在函数中打印数据指向的整数:*data
,在函数外打印指针的值b.t2
如果希望指针在函数外部更改,请传递指针的地址:
unsigned int test2(unsigned int** data)
{
...
*data = &(a.t1[3][0]);
如果现在打印b.t2
的值,它将不再为空
size = test2(&b.t2);
cout << (b.t2) << endl;
size=test2(&b.t2);
不能因为你甚至没有打印相同的东西。在函数中打印数据指向的整数:*data
,在函数外打印指针的值b.t2
如果希望指针在函数外部更改,请传递指针的地址:
unsigned int test2(unsigned int** data)
{
...
*data = &(a.t1[3][0]);
如果现在打印b.t2
的值,它将不再为空
size = test2(&b.t2);
cout << (b.t2) << endl;
size=test2(&b.t2);
cout数据
,因为它是一个单独的指针,您正在为它传递一些未初始化的值