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 が述べたように、 in の初期化valor_dosmain正しくないため、実行時にセグメンテーション違反が発生する可能性があります。あなたもそれを変えたいと思うかもしれません。

お役に立てれば!

于 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 に答える