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

Wskaźniki a tablice? Wychodzą mi jakieś sprzeczności!

Ostatnio zmodyfikowano 2010-11-11 12:05
Autor Wiadomość
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? 
C/C++
#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 );
}
P-23523
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.
P-23524
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]? 
P-23527
malan
» 2010-11-04 09:26:28
Nie wiem dlaczego, ale jak widzę wyrażenie
zmienna wskaźnikowa
 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.
P-23528
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.



P-23529
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
P-23530
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?!
P-23536
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.
P-23555
« 1 » 2 3
  Strona 1 z 3 Następna strona