Czy do wskaźnika jest przypisana tablica?

0

Proszę powiedz:
Jak można sprawdzić czy do wskaźnika przypisaliśmy już tablicę.

3

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

1
  1. Sprawdzić czy wskaxnik wskazuje na nullptr jak tak to nic nie ma
  2. 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.
6

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.

1
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

0

ale czy przypisaliśmy tablicę czy przypisaliśmy cokolwiek, np jeden element?

0

Chyba wystarczy sprawdzić czy cokolwiek jest przypisane do wskaźnika.
Chyba już wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1