在C中更改void指针值时出现问题

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

 #include #include 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; } 

在你的function

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

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

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

 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是不正确的,并且可能会在运行时导致段错误。 您可能也想要更改它。

希望这可以帮助!

这里

  int *valor_dos = 25; 

你正在初始化一个指向int的指针,其值为25 ..即,它指向内存位置25,这只会导致麻烦。 我很惊讶你没有得到段故障。

 int *valor_dos = 25 

这个说法不正确。 您在这里声明了一个指针,因此您无法为其指定值(25)。