Es gibt zwei C-Sprachen.
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;
ich den Befehl cc main.c global.c
und ./a.out
laufen, dann finde ich die Variable a
‚s-Wert verändert werden kann, und die Variable d
's-Wert kann' t geändert werden.
Warum?
Sie haben 'd' als Konstante in global.c definiert, es ist nur für main.c sichtbar, Sie können den Wert nicht ändern. – user2728397
@ErYe Können Sie etwas über "Kann nicht geändert werden" ausarbeiten? Erhalten Sie einen Compiler-Fehler (unwahrscheinlich, da Sie den Compiler glauben, dass "d" beschreibbar wäre)? Ein Linker-Fehler (vielleicht, wenn Sie einen C++ - Compiler verwenden) oder ein Core-Dump (wahrscheinlicher, als const ermöglicht es dem Linker, die Variable in ein nicht beschreibbares Segment zu setzen) – tofro
"* Dann finde ich die Variable a's Wert sein kann geändert * "wie? Und was druckt das Programm? – alk