C++为 void 指针分配一个字符串

C++ assign void pointer an string

本文关键字:一个 字符串 void 指针 分配 C++      更新时间:2023-10-16

我有下一个问题。我有这样的功能。

无符号长 FuncTest(void* name( { ... }

当我调用 FuncTest 时,我会制作这个表格

int main()
{
void* test = NULL;
cout << "Value of test before to call Function: " << test << endl;
FuncTest(test);
cout << "Value of test after to call Function: " << test << endl;
}

我需要它 FuncTest 更改变量名称的值,例如字符串 o char。可能吗?

我放了我拥有的代码,但不起作用。

void FuncTest(void* name)
{
char* NewValue = _strdup("Hello!");
cout << "Value of name in FuncTest before change: " << name << endl;
name = NewValue;
cout << "Value of NewValue in FuncTest: " << NewValue << endl;
cout << "Value of name in FuncTest after change: " << (char*)name << endl;
}

结果是下一个:

Value of test before to call Function: 00000000
Value of name in FuncTest before change: 00000000
Value of NewValue in FuncTest: Hello!
Value of name in FuncTest after change: Hello!
Value of test after to call Function: 00000000

有人可以帮助我 谢谢!

您按值将test传递给函数,因此您在函数中对它所做的任何更改都不会反映在调用程序中。

您需要通过引用传递它:

void FuncTest(void *&name)

如果要更改测试的值,则只需将测试指针作为 FuncTest 函数的参数传递即可。

FuncTest(&test);

FuncTest 需要像这样改变

void FuncTest(void** name)
{
char* NewValue = _strdup("Hello!");
cout << "Value of name in FuncTest before change: " << name << endl;
*name = NewValue;
cout << "Value of NewValue in FuncTest: " << NewValue << endl;
cout << "Value of name in FuncTest after change: " << (char*)*name << endl;
}

如果要更改参数的值,则应发送一个地址。 测试似乎是指针,但在调用函数时它在堆栈寄存器中注册。堆栈寄存器变量在函数执行后初始化。所以你需要发送测试指针,然后即使在函数结束后释放它,该值也会保留。 希望这可以帮助您理解。

相关文章: