marek Temat założony przez niniejszego użytkownika |
Wskaźniki a tablice? Wychodzą mi jakieś sprzeczności! » 2010-11-03 15:38:24 / Nie wiem dlaczego &Tab=Tab? Czy ktoś powie mi pod jakim adresem szukać adresu zmiennej wskaźnikowej
Tab? |
#include <iostream> #include <conio.h> using namespace std; int main() { int Tab[] = { 1, 2 }; cout << "*(Tab) = " <<*( Tab ) << endl; cout << "&Tab = " <<& Tab << endl; cout << "Tab = " << Tab << endl; getch(); return( 0 ); }
|
|
inny1997 |
» 2010-11-03 20:35:08 wydaje mi się że nazwa tablicy jest już adresem, więc
&tab = tab
nie jest sprzecznością.
&tab - wskazuje na adres tab[0]
tab - wskazuje na adres tab[0]
chyba że się pomyliłem, ale mi się tak wydaje.
|
|
marek Temat założony przez niniejszego użytkownika |
» 2010-11-04 05:48:23 Też coś tak czuję. Ale męczy mnie co innego. Wiadomo że tab jest zmienną wskaźnikową, która przechowuje adres do początku tablicy, czyli do tab[0]=1. Każda zmienna wskaźnikowa ma swój adres. Jaki w takim razie jest adres zmiennej wskaźnikowej tab? Ze zwykłej operacji &tab wynika że to jest ten sam adres co tab[0]!. To tak jakby pod tym samym adresem były 2 zmienne. "1" i adres pod którym jest liczba 1! Wiem że popełniam jakiś błąd. Ale jaki? Być może adres zmiennej wskaźnikowej nie jest nikomu potrzebny. Może np. twórca C++ dał go jedno miejsce przed tab[0]? |
|
malan |
» 2010-11-04 09:26:28 Nie wiem dlaczego, ale jak widzę wyrażenie to wpadam w szał dzikich świń. Co to jest zmienna wskaźnikowa? Może chodziło Ci o wskaźnik na zmienną? Ja bym powiedział, że Tab jest dwuelementową tablicą typu int. A Tab jako nazwa tejże tablicy odwołuje się do jej pierwszego elementu, czyli Tab == &Tab[0] . Nie wiem dlaczego &Tab=Tab? |
Ponieważ (uogólniając), to zapis &Tab jest równoznaczny z zapisem Tab. Jednak trzeba przy tym zaznaczyć, iż przy zapisie Tab zachodzi niejawna konwersja do *Tab. Amen. Aha.., i użyj jeszcze raz sformułowania zmienna wskaźnikowa to Ci znajdę, napiszę na czole "Zmienna wskaźnikowa" i przekreślę różowym markerem. |
|
marek Temat założony przez niniejszego użytkownika |
» 2010-11-04 10:23:40 Malan.
Nie chcę chodzić z napisem "zmienna wskaźnikowa" na czole. Ale rozumiem że tab jest wskaźnikiem do pierwszego elementu tablicy.
To odpowiedz mi na 2 pytania.
Jak mogę sprawdzić jaki jest adres pierwszego elementu tej tablicy, inaczej jaki jest adres "1" z {1,2}?
Jak mogę sprawdzić jaki jest adres wskaźnika wskazującego na wyżej wymienione "1"?
Wiem że to jest bzdura, ale mi wychodzi że pod wskaźnikiem jest adres tego wskaźnika, (np pod adresem 1000 jest 1000) oraz że pod tym samym adresem jest 1.
|
|
inny1997 |
» 2010-11-04 11:48:44 wskaźnik na tab oznacza tab[0]
ale w programowaniu można
int tab[2]={1,2};
int* wsk;
wsk = &tab;
cout<<*(wsk+1); //wtedy wskazuje wartość tab[1] zamiast tab[0]
oraz
int tab[2]={1,2};
int* wsk1;
int** wsk2;
wsk1 = &tab;
wsk2 = &wsk1; //wtedy mam wskaźnik na wskaźnik
cout<<*wsk2; //chyba wtedy pokazuje wartość tab[0]
może zrobiłem jakiś błąd ,ale to mniej więcej tak wygląda
|
|
malan |
» 2010-11-04 18:39:50 @marek: Mylisz pojęcia- wskaźnik, adres, wskaźnik do zmiennej. Wróć do kursu i przerób go sobie raz jeszcze. Jak mogę sprawdzić jaki jest adres pierwszego elementu tej tablicy, inaczej jaki jest adres "1" z {1,2}? |
(...)tab jest wskaźnikiem do pierwszego elementu tablicy. |
...praktycznie. Jak mogę sprawdzić jaki jest adres wskaźnika wskazującego na wyżej wymienione "1"? |
Jakiego wskaźnika?! |
|
marek Temat założony przez niniejszego użytkownika |
» 2010-11-04 21:46:08 Malan
Ja chyba niewyraźnie mówię.
Zgodzisz się ze mną że tab jest wskaźnikiem do pierwszego elementu tablicy.
Wskaźnik, jak każda zmienna ma swój adres.
To ja się pytam. Jaki jest ten adres?
Jak mi na to odpowiesz, to będę happy. |
|
« 1 » 2 3 |