Каква е разликата между int * a; и int ** a; в С?


Отговор 1:

Да предположим, че приемаме

int i;

int * a;

int ** b;

Сега a е показалец, който съхранява адреса на i, той се нарича указател, тъй като сочи адрес, който е от един тип….

int * a може да съхранява адреса на i, тъй като това е цяло число.

Сега погледнете към int ** b, това е показалец към показалец, можете да го гледате като int * (* b) означава, че е указател, който ще сочи към друг показалец от цяло число тип….

Средствата b ще съхраняват адреса на a.

Така че можем да зададем стойности на три променливи като:

I = 5;

а = & I;

б = & А;

Важно:

ако отпечатате i: 5 (стойност) ще бъде отпечатано.

ако отпечатате a: адрес на i ще бъде отпечатан.

ако отпечатате * a: 5 (стойност) ще бъде отпечатано.

ако отпечатате b: Адресът на a ще бъде отпечатан

ако отпечатате * b: адресът на i ще бъде отпечатан

ако отпечатате ** b: 5 (стойност) ще бъде отпечатана.


Отговор 2:

Здравейте, вижте диаграмата и кода по-долу, ще получите отговора си. Всъщност това е концепция за показалец (двоен указател)

Адресът на променлива число има: 1000

Адресът на Pointer ptr1 е: 2000

Адресът на Pointer ptr2 е: 3000

// ————————- код ——————— //

#include

int main ()

{

int num = 10;

int * ptr1;

int ** ptr2;

ptr1 = & num;

ptr2 = & ptr1;

printf ("Стойност на число =% d \ n", число);

printf ("Стойността е налична в * ptr1 =% d \ n", * ptr1);

printf ("Стойност налична на ** ptr2 =% d \ n", ** ptr2);

}

изход:

Стойност на числото = 10

Стойност на * ptr1 = 10

Стойност, налична на ** ptr2 = 10