gpt4 book ai didi

c - 在 C 中更改 void 指针值的问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:31 24 4
gpt4 key购买 nike

基本上我的问题是我正在尝试更改 valor 变量中的值,以便在调用 cambiar_valor 函数后它变成 25。但是我的问题是它根本没有改变。我在这里做错了什么?我正在尝试制作一个真正通用的函数,以便根据我传递给函数的数据类型,它会发生动态变化。在这种情况下是一个整数类型,但我在这里要做的是检查我是否可以更改函数内 valor 变量的值

#include<stdio.h>
#include<stdlib.h>

void cambiar_valor(void* valor,int* valor_dos) {//assign valor_dos to valor
valor = valor_dos;
}

int main() {
void *valor;
int *valor_dos = 25;
cambiar_valor(valor,valor_dos);
printf("%d \n",(int*)valor);//this should show 25
return 0;
}

最佳答案

在你的函数中

void cambiar_valor(void* valor,int* valor_dos) {//assign valor_dos to valor
valor = valor_dos;
}

您正在按值传递指针,这意味着 valorvalor_dos 是您传递的参数的副本。在内部重新分配 valor该函数对调用函数没有影响。

要解决此问题,请通过指针获取参数:

void cambiar_valor(void** valor, int* valor_dos) {//assign valor_dos to valor
*valor = valor_dos;
}

然后调用

cambiar_valor(&valor, valor_dos);

此外,正如@Levon 提到的,您在 main 中对 valor_dos 的初始化不正确,可能会在运行时导致段错误。您可能也想更改它。

希望这对您有所帮助!

关于c - 在 C 中更改 void 指针值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com