簡體   English   中英

在C中更改void指針值時遇到問題

[英]Problems changing a void pointer value in C

基本上我的問題是,我試圖改變內部值valor變量,從而使調用后cambiar_valor功能,它chenges至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是不正確的,並且可能在運行時導致segfault。 您可能還想更改它。

希望這可以幫助!

這里

 int *valor_dos = 25;

您正在初始化一個指向int的值25的指針。即,它指向內存位置25,這只會導致麻煩。 我很驚訝您沒有遇到段錯誤。

int *valor_dos = 25

這句話是不正確的。 您在此處聲明了一個指針,因此無法為其分配值(25)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM