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

时间:2012-06-15 04:21:24

标签: c pointers void-pointers

基本上我的问题是我正在尝试更改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;
}

3 个答案:

答案 0 :(得分:3)

在你的功能中

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所提到的,valor_dosmain的初始化不正确,可能会在运行时导致段错误。您可能也希望改变它。

希望这有帮助!

答案 1 :(得分:2)

这里

 int *valor_dos = 25;

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

答案 2 :(得分:-2)

int *valor_dos = 25

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