C言語のフライが2つあります。
main.c
:int * 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;
の値はプログラムの実行を通じて一定のまま:使用することにより
global.cに 'd'を定数として定義しましたが、main.cにしか表示されません。値を変更することはできません。 – user2728397
@ErYe「変更できません」のビットを詳しく説明できますか?あなたはコンパイラのエラーを受けていますか(おそらく、あなたは 'd'が書き込み可能であると考えるようにコンパイラを騙しているので)?リンカエラー(おそらく、C++コンパイラを使用している場合)またはコアダンプ(おそらく、constがリンカに変数を書き込み不可能なセグメントに入れることができるように) – tofro
"*次に、変数aの値が変更* "どのように?また、プログラムは何を印刷しますか? – alk