C 将结构传递给函数的正确方法是什么?

C 将结构传递给函数的正确方法是什么?,c,struct,C,Struct,我有一个结构,我想把它传递给一个函数。显然,我犯了一些错误,因为输出总是相同的:(null) 谁能帮帮我吗。 谢谢 问题是您在QueryData中指定了指针。由于C按值传递所有参数,指针将被复制,您只需在QueryData函数中修改本地副本 您需要通过传递一个指针来模拟按引用传递(我说“模拟”,因为C没有按引用传递),在您的例子中,就是传递一个指向指针的指针 比如: BOOL QueryData(char ** String, char ** Name) { ... *Strin

我有一个结构,我想把它传递给一个函数。显然,我犯了一些错误,因为输出总是相同的:
(null)

谁能帮帮我吗。 谢谢


问题是您在
QueryData
中指定了指针。由于C按值传递所有参数,指针将被复制,您只需在
QueryData
函数中修改本地副本

您需要通过传递一个指针来模拟按引用传递(我说“模拟”,因为C没有按引用传递),在您的例子中,就是传递一个指向指针的指针

比如:

BOOL QueryData(char ** String, char ** Name)
{
    ...
    *String = AllocateMemory(...);
    ...
    *Name = AllocateMemory(...)
    ...
}
就像

QueryData(&TestStruct->Value1, &TestStruct->Value2);

问题是您在
QueryData
中指定了指针。由于C按值传递所有参数,指针将被复制,您只需在
QueryData
函数中修改本地副本

您需要通过传递一个指针来模拟按引用传递(我说“模拟”,因为C没有按引用传递),在您的例子中,就是传递一个指向指针的指针

比如:

BOOL QueryData(char ** String, char ** Name)
{
    ...
    *String = AllocateMemory(...);
    ...
    *Name = AllocateMemory(...)
    ...
}
就像

QueryData(&TestStruct->Value1, &TestStruct->Value2);

C中的指针是按值传递的:
QueryData
中的
String
Name
参数是局部变量,它们最初是调用方的
TestStruct
中(null)指针的副本。更改
QueryData
中的局部变量不会更改存储在结构中的值


您需要传递
QueryData
指向结构本身的指针(即
QueryData(TestStruct)
)或指向存储在结构中的两个
char*
值的指针(即
QueryData(&TestStruct->Value1,&TestStruct->Value2)
),因此
QueryData
可以更改结构本身的内容。

C中的指针按值传递:
QueryData
中的
字符串和
Name
参数是局部变量,它们最初是调用方
TestStruct
中(null)指针的副本。更改
QueryData
中的局部变量不会更改存储在结构中的值


您需要传递
QueryData
指向结构本身的指针(即
QueryData(TestStruct)
)或指向存储在结构中的两个
char*
值的指针(即
QueryData(&TestStruct->Value1,&TestStruct->Value2)
),这样
QueryData
就可以改变结构本身的内容。

这个
BOOL
东西伤了我的眼睛。为什么有一个“windows”标签,你的问题与你机器的操作系统有关吗?这件事伤了我的眼睛。为什么会有一个“windows”标签,你的问题与你机器的操作系统有关吗?