2016-10-06 22 views
-2

他の関数内のスタック内の値を変更したいと思います。関数内の変数の値を変更する

int Function(int *var){ 
    int i=125; 
    var = i; 
} 
int Function2(){ 
    int apple; 
    Function(&apple); 
    printf("%d", apple); 
} 

これは、この行var = 125;で私にerror: assignment makes pointer from integer without a cast示しています。

apple = 125を取得するために、iの値をvarにコピーします。 (ただし、私がFunctionを残すとき、スタック内のiは解放されます)。

私はどこで間違いをしましたかわかりません。

+1

(ニット)ですが、 ''*' 'は*型*ではなく*変数*になります。 '(int * var)' 'int * a、b、c;'( 'b'と' c'はポインタではありません...) –

+0

^上記のコメントは個人的なスタイルであり、言語。また、 'int *'は実際にはタイプ –

+0

'* var = i'です。それは問題です –

答えて

1

コード内int *var = &appleが発生します。

ので、varはリンゴのアドレスを保持し、リンゴの変数がアドレス0x1000000番地に格納されていることを

を想像してみてください。 varは0x1000000を指しています。

もしvar = iならば、var変数は0x1000000のアドレスを残し、新しいアドレスを125のiの値として保持します。これは、より低いメモリアドレスにアクセスできないため無効です。

あなたの要件を満たすため、* var = iを実行する必要があります。

3

ポインタを逆参照する必要があります。

*var = 125; 

書いたとおり、ポインタに格納されているアドレス(ポインタが指しているもの)を変更しようとしています。

+0

あなたの解決策では、 'var'値= 125そして' apple 'メモリアドレスで値をチェックすれば '125'を見ることができます。 –

+0

@Alexis_FR_JPはい。あなたは正しい(あなたのコメントを間違って読んだので私の古いコメントは削除されました)。 –

+0

書かれているように、コードは明らかに無効です。 C言語は暗黙の整数からポインタへの変換をサポートしていません。コードには定義された動作がありません。したがって、「ポインタに格納されているアドレスを変更しようとしている」と判断する方法はありません。 – AnT

関連する問題