2016-03-28 18 views
-3

C言語のフライが2つあります。
main.cint * const AND extern int *

// main.c 
#include <stdio.h> 

extern int * a; 
extern int d; 

int main(){ 
    printf("==> a==>%p\n", a); 
    printf("==>&a==>%p\n", &a); 
    printf("==>%zd\n", *a); 
    printf("======================\n"); 

    int c = 5; 
    a = &c; 

    printf("==> a==>%p\n", a); 
    printf("==>&a==>%p\n", &a); 
    printf("==>%zd\n", *a); 
    printf("======================\n"); 

    d = 5; 
    printf("==>%d\n", d); 

    return 0; 
} 

global.c

// global.c 
int b = 1; 
int * const a = &b; 
int const d = 1; 

私はコマンドcc main.c global.cを実行し、./a.out、それから私は、変数a見つけるの値を変更することができ、かつ変数dの値に '変更する必要があります。
なぜですか?

int const a=10; 

の値はプログラムの実行を通じて一定のまま:使用することにより

+0

global.cに 'd'を定数として定義しましたが、main.cにしか表示されません。値を変更することはできません。 – user2728397

+0

@ErYe「変更できません」のビットを詳しく説明できますか?あなたはコンパイラのエラーを受けていますか(おそらく、あなたは 'd'が書き込み可能であると考えるようにコンパイラを騙しているので)?リンカエラー(おそらく、C++コンパイラを使用している場合)またはコアダンプ(おそらく、constがリンカに変数を書き込み不可能なセグメントに入れることができるように) – tofro

+0

"*次に、変数aの値が変更* "どのように?また、プログラムは何を印刷しますか? – alk

答えて

1

使用:

int* const a=&b; 

Bの、すなわちアドレスに含まれる値が全体にわたって一定のままです。

bの値が変更されることがあります。

+0

私のコードは 'int * const a =&b;'ですが、 'const int * a =&b;'ではなく、 'mian.c'ファイルで' a'の値を変更することができます。 – ErYe

+0

http://stackoverflow.com/questions/3247285/const-int-int-const @ErYe –

+0

'main.c'ファイルで、' a =&c; 'をなぜ変更できますか? – ErYe

関連する問題