基本上我的问题是我正在尝试更改valor
变量中的值,以便在调用cambiar_valor
函数后它变为25但是我的问题是它没有' t chang。我在这做错了什么?我正在尝试创建一个非常通用的函数,以便根据数据类型传递给函数,它会改变它。在这种情况下是一个整数类型,但我在这里要做的是检查我是否可以更改函数内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;
}
答案 0 :(得分:3)
在你的功能中
void cambiar_valor(void* valor,int* valor_dos) {//assign valor_dos to valor
valor = valor_dos;
}
您按值传递指针,这意味着valor
和valor_dos
是您传入的参数的副本。在函数内重新分配valor
对调用函数没有影响
要解决此问题,请使用指针中的参数:
void cambiar_valor(void** valor, int* valor_dos) {//assign valor_dos to valor
*valor = valor_dos;
}
然后致电
cambiar_valor(&valor, valor_dos);
另外,正如@Levon所提到的,valor_dos
中main
的初始化不正确,可能会在运行时导致段错误。您可能也希望改变它。
希望这有帮助!
答案 1 :(得分:2)
这里
int *valor_dos = 25;
你正在初始化一个指向int的指针,其值为25 ..即,它指向内存位置25,这只会导致麻烦。我很惊讶你没有得到一个段错误。
答案 2 :(得分:-2)
int *valor_dos = 25
此声明不正确。您在此处声明了一个指针,因此您无法为其指定值(25)。