Proszę powiedz:
Jak można sprawdzić czy do wskaźnika przypisaliśmy już tablicę.
Z tego co wiem to jeśli jesteśmy na poziomie gołych wskaźników to jeśli wskaźnik jest rożny od NULL
nullptr
czy 0
to znaczy iż wskazuje na jakiś obszar pamięci. To może być tablica, To może być jakas inna struktura czy pojedynczy element.
Oczywiście C++ w swej dobroci nie daje pożliwości sprawdzenia ani nawet nie za bardzo zabrania żeby móc wpisać tam cokolwiek
- Sprawdzić czy wskaxnik wskazuje na nullptr jak tak to nic nie ma
- jak chcesz sprawdzić czy to tablica std::is_array ale wskaźnik to nie tablica więc nie bardzo. Chociaz na stacku kombinacje jakieś robia. ale chyba nie o to ci chodzi.
Nijak bez tworzenia rejestru takich przypisań. Wskaźnik to jedynie adres w pamięci. Jego dereferencja to odniesienie się do zawartości n-bitów określanych przez "typ" wskaźnika zaczynających się od tego adresu.
Jak sobie taki rejestr zaimplementujesz to sprawdzając w nim.
gaborek1987 napisał(a):
Proszę powiedz:
Jak można sprawdzić czy do wskaźnika przypisaliśmy już tablicę.
stwórz sobie funkcję, która zwraca wartość logiczną bool
i wykonaj sprawdzenie wskaźnika czy jest ustawiony na jakiś adres. Zrób to mniej więcej w ten sposób
#include <iostream>
using namespace std;
int main()
{
int tab[10];
int *ptr=nullptr;
// ptr=&tab[0]; //<- odkomentuj tą linię i zobacz co się stanie
if(ptr){
cout << "wskaznik jest ustawiony na adres " << ptr;
}
else{
cout << "wskaznik wskazuje na adres 0";
}
}
Aha i niestety. Nie będziesz wiedział czy to na co wskazuje wskaźnik jest adresem tablicy, string-a czy adresem jakiegoś innego obiektu - tego nie da się sprawdzić, możesz jedynie sprawdzić czy wskaźnik wskazuje na jakikolwiek adres.
-- EDIT --
Ewentualnie możesz kombinować w ten sposób i na tej podstawie sam wydedukować czy obiekt którego masz adres jest tablicą czy czymkolwiek innym
#include <iostream>
using namespace std;
bool sprawdzacz(int *wskaznik_do_sprawdzenia, int *obiekt_do_porownania);
int main()
{
int tab[10];
int tab2[10];
int *ptr=nullptr;
ptr=&tab[0];
if(sprawdzacz(ptr,tab)){
cout << "to jest ten sam obiekt" << endl;
}
else{
cout << "to sa dwa rozne obiekty ale nie wiem jaki to dokladnie obiekt" << endl;
}
}
bool sprawdzacz(int *wskaznik_do_sprawdzenia, int *obiekt_do_porownania)
{
if(wskaznik_do_sprawdzenia == obiekt_do_porownania){
return true;
}
return false;
}
chociaż to jest bez sensu... no ale pokazuję, że się nie da
ale czy przypisaliśmy tablicę czy przypisaliśmy cokolwiek, np jeden element?
Chyba wystarczy sprawdzić czy cokolwiek jest przypisane do wskaźnika.
Chyba już wiem.