Jaký je rozdíl mezi int * a; a int ** a; v C?


Odpověď 1:

Předpokládejme, že to vezmeme

int i;

int * a;

int ** b;

Nyní je ukazatel, který ukládá adresu i, nazývá se ukazatel, protože ukazuje na adresu jednoho typu….

int * a lze uložit adresu i, protože se jedná o celočíselnou proměnnou.

Nyní se podívejme na int ** b je to ukazatel na ukazatel, na který se můžete dívat jako na int * (* b) znamená, že se jedná o ukazatel, který bude ukazovat na jiný ukazatel celočíselného typu….

Prostředky b uloží adresu a.

Můžeme tedy přiřadit hodnoty třem proměnným jako:

i = 5;

a = & i;

b = & a;

Důležité:

pokud budete tisknout i: 5 (hodnota) bude vytištěna.

pokud vytisknete: bude vytištěna adresa i.

Pokud budete tisknout * a: 5 (hodnota) bude vytištěna.

pokud budete tisknout b: Bude vytištěna adresa a

pokud budete tisknout * b: vytiskne se adresa i

Pokud budete tisknout **, vytiskne se b: 5 (hodnota).


Odpověď 2:

Ahoj, viz níže diagram a kód, dostanete svou odpověď. Ve skutečnosti jde o koncepty typu ukazatel na ukazatel (double pointer)

Adresa proměnné num má: 1000

Adresa ukazatele ptr1 je: 2000

Adresa ukazatele ptr2 je: 3000

// -------- kód ------- //

#include

int main ()

{

int num = 10;

int * ptr1;

int ** ptr2;

ptr1 = & num;

ptr2 = & ptr1;

printf ("Hodnota num =% d \ n", num);

printf ("Hodnota dostupná na * ptr1 =% d \ n", * ptr1);

printf ("Hodnota dostupná na ** ptr2 =% d \ n", ** ptr2);

}

Výstup:

Hodnota num = 10

Hodnota dostupná na * ptr1 = 10

Hodnota dostupná na ** ptr2 = 10