0

基本上我的问题是我试图改变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;
}
4

3 回答 3

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_dosin初始化main不正确,可能会在运行时导致段错误。你可能也想改变它。

希望这可以帮助!

于 2012-06-15T04:26:40.057 回答
2

这里

 int *valor_dos = 25;

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

于 2012-06-15T04:25:35.023 回答
-2
int *valor_dos = 25

这种说法是不正确的。您在这里声明了一个指针,因此您不能为其分配值 (25)。

于 2012-06-15T04:27:55.877 回答