Я переформатировал ваш код.
Ошибка была в этой строке:
printf("%d", (**c));
Чтобы исправить это, измените на:
printf("%d", (*c));
* извлекает значение из адреса. ** извлекает значение (в данном случае адрес) другого значения из адреса.
Кроме того, () было необязательным.
#include <stdio.h>
int main(void)
{
int b = 10;
int *a = NULL;
int *c = NULL;
a = &b;
c = &a;
printf("%d", *c);
return 0;
}
РЕДАКТИРОВАТЬ:
Строка:
c = &a;
необходимо заменить на:
c = a;
Это означает, что значение указателя 'c' равно значению указателя 'a'. Таким образом, «c» и «a» указывают на один и тот же адрес («b»). Выход:
10
РЕДАКТИРОВАТЬ 2:
Если вы хотите использовать двойной *:
#include <stdio.h>
int main(void)
{
int b = 10;
int *a = NULL;
int **c = NULL;
a = &b;
c = &a;
printf("%d", **c);
return 0;
}
Выход:
10