2016-03-28 14 views
-3

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?

+0

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

+0

@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

+0

"* Dann finde ich die Variable a's Wert sein kann geändert * "wie? Und was druckt das Programm? – alk

Antwort

1

Durch die Verwendung von:

int const a=10; 

der Wert von a bleibt während der Ausführung des Programms konstant.

Verwendung:

int* const a=&b; 

Der Wert enthalten ist, durch eine das heißt die Adresse b bleibt während konstant.

Der Wert von b kann sich ändern.

+0

Mein Code ist 'int * const a = & b;', aber nicht 'const int * a = & b; 'Und in der' mian.c' Datei kann der 'a's Wert geändert werden. – ErYe

+0

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

+0

In der 'main.c' Datei, warum kann ich' a = & c; 'ändern? – ErYe

Verwandte Themen