Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将结构内部的二维数组传递给另一个结构_C++_Arrays_Pointers_Struct - Fatal编程技术网

C++ 将结构内部的二维数组传递给另一个结构

C++ 将结构内部的二维数组传递给另一个结构,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

我试图用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 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
数据
,因为它是一个单独的指针,您正在为它传递一些未初始化的值