Wskaźniki w C
Podstawy podstaw podstaw podstaw...
Co musi mieć zmienna?
Istniejąca w określonym momencie zmienna DOWOLNEGO typu MUSI mieć: MUSI
Typ
Adres w pamięci
Wartość Przykład:
int x=3;
Przechowywanie zmiennych w pamięci – bardzo
uproszczone
void main(void){
int x;
x=7;
}
RAM
X=7
Śmieci
Void main(void){
int x;
Wartość 1233
X
Adres w pamięci Nazwa
Przechowywanie zmiennych w pamięci – bardzo
uproszczone
void main(void){
int x;
x=7;
}
7
Wartość 1233
X
Adres w pamięci Nazwa
RAM
Przechowywanie
wskaźników w pamięci – bardzo uproszczone
void main(void){
int *w;
}
W
Zmienna w jest wskaźnikiem (do int), który wskazuje na ŚMIECI. ŚMIECI.
?
Przechowywanie
wskaźników w pamięci – bardzo uproszczone
void main(void){
int x;
int *w;
x=7;
}
W
Zmienna w wskazuje na ŚMIECI! ŚMIECI!
X=7
?
Przechowywanie
wskaźników w pamięci – bardzo uproszczone
RAM
void main(void){
int x;
int *w;
x=7;
}
Nazwa Adres w
pamięci Wartość
X 1233 7
W 6424
????
Zmienna w wskazuje na ŚMIECI! ŚMIECI!
Przechowywanie
wskaźników w pamięci – bardzo uproszczone
void main(void){
int x;
int *w;
x=7;
w=&x;
}
Zmienna w wskazuje na zmienną x
W
X=7
Przechowywanie
wskaźników w pamięci – bardzo uproszczone
RAM
void main(void){
int x;
int *w;
x=7;
w=&x;
}
Nazwa Adres w
pamięci Wartość
X
1233
7W 6424
1233
Nazwa Adres w
pamięci Wartość X
1233 1233
7W 6424
1233 1233
Wartość w to adres zmiennej x
Odwoływanie się do wartości zmiennej wskazywanej – wstęp
W
X=7 Y=2
void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=2;
}
Odwoływanie się do wartości zmiennej wskazywanej – wstęp
RAM
void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=2;
}
Nazwa Adres w
pamięci Wartość
X 1233 7
W 6424 1233
y 2352 2
Void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
y=*w;
}
Void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
}
Void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
}
void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
}
Odwoływanie się do wartości zmiennej wskazywanej – wstęp
W
X=7 Y=??
Y=7
Void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=y=**w;w;
}
Void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
}
void main(void){
int x,y;
int *w;
x=7;
w=&x;
y=*w;
}
Odwoływanie się do wartości zmiennej
wskazywanej
RAM Nazwa Adres w
pamięci Wartość
X 1233 7
W 6424 1233
y 2352 ??????
Nazwa Adres w
pamięci Wartość
X 1233
7
W 6424 1233
y 2352
7
Jaką wartość przyjmie y?
Nazwa Adres w
pamięci Wartość
x 1233 7
w 6424 1233
y 2352 14
s 4311 1233
void main(void){
int x,y;
int *w,*s;
x=7;
y=11;
w=&x;
s=w;
y=(*s)+(*w);
}