Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wskaźniki, a adresy zmiennych

Ostatnio zmodyfikowano 2012-11-09 12:17
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
[C++] Wskaźniki, a adresy zmiennych
» 2012-11-09 11:45:02
Czy zgodzicie sie z tym ze mowienie iz wskaznik na cos pokazuje, jest bledne ?

Gdyby tak bylo to przeciez taki kod wykonalby sie bez problemow

C/C++
int k = 5;

int * wsk;

wsk = & k; //Wedlug mnie nie pokazuje na adress k, tylko od tego momentu k i wsk maja takie same adresy


cout << * wsk << endl;

delete wsk;

cout << k << endl; //*Gdyby pokazywal to by tutaj nie walilo errora

Pewnie to kolejna rozkmnina nad banalnym problemem ktora nic nie wnosi, i na pewno bledna. Mozecie mnie nakierowac :D?


P.S *Sory zle napisalem error on wyskakuje przy usuwaniu adressu ale to nadal ten sam problem ;p
P-68878
DejaVu
» 2012-11-09 11:51:05
Nie można usuwać pamięci operatorem delete (ani funkcją ::free), której sam nie zarezerwowałeś.

& oznacza pobranie adresu zmiennej.
* oznacza pobranie wartości spod adresu na który wskazuje wskaźnik.

Zmienna wsk ma inny adres niż zmienna k. Nawet jeżeli przypiszesz:
C/C++
wsk = NULL;
to nadal adres zmiennej wsk będzie != NULL, tj.
C/C++
printf( "Adres wsk = %p\n", & wsk );
P-68880
diego997
Temat założony przez niniejszego użytkownika
» 2012-11-09 12:06:53
Dejavu moglbys spojrzec na to i powiedzeic czy jest poprawne ?

Link: http://imageshack.us/f/827/wskazniki.png/




P.S Dzieki temu co napisales niemozliwa jest operacja delete &wsk; Prawda ?



Aha czyli raczej ten screen bedize niepoprawny bo gdyby tak dzialaly wskazniki to by raczej ich nie bylo ;p
P-68881
DejaVu
» 2012-11-09 12:09:45
Każda zmienna ma swój adres - nie ważne czy jest to wskaźnik czy też nie.

@up: operacja jest możliwa, ale jest nieprawidłowa.

/edit:
C/C++
#include <cstdio>

int main()
{
    int zmienna = 0;
    int * wskaznik = NULL;
    printf( "adres   'zmienna'  = %p\n", & zmienna );
    printf( "adres   'wskaznik' = %p\n", & wskaznik );
    printf( "wartosc 'zmienna'  = %p\n", zmienna );
    printf( "wartosc 'wskaznik' = %p\n", wskaznik );
    wskaznik = & zmienna;
    printf( "wartosc 'wskaznik' = %p\n", wskaznik );
    return 0;
}
Standardowe wyjście programu:
adres   'zmienna'  = 0028ff1c
adres   'wskaznik' = 0028ff18
wartosc 'zmienna'  = 00000000
wartosc 'wskaznik' = 00000000
wartosc 'wskaznik' = 0028ff1c
P-68882
diego997
Temat założony przez niniejszego użytkownika
» 2012-11-09 12:16:45
No wlasnie i przez to wydawalo mi sie ze:

C/C++
int * wsk;


delete & wsk;

jest rownowazne:

C/C++
int zmienna;


delete zmienna;
P-68883
Badman
» 2012-11-09 12:17:55
P.S *Sory zle napisalem error on wyskakuje przy usuwaniu adressu ale to nadal ten sam problem ;p

Ten error to pewnie ochrona pamięci systemu.
Pomyśl chcesz zwolnić obszar pamięci, którego nie rezerwowałeś !
P-68884
« 1 »
  Strona 1 z 1