2014-01-10 3 views
2

Я новичок в C, и я пытаюсь схватить указатели. Я натолкнулся на это выражениеобъяснить указатели на указатели выпуск

char *foo = *(char **)bar; 

что именно происходит? Я понимаю, что * это указатель ** является указателем на указатель, но я на самом деле не получить то, что *(char **)bar

редактировать: Стоит отметить, что бар объявлен сопзЬ пустота * бар

ответ

3

Начинающие и эксперты могут извлечь выгоду из того, что основы действительно прочные.

  • А «переменная типа Т» является местом хранения, которые могут быть использованы для хранения или принести значения типа т.
  • A "указатель to t" is значение.
  • Применение оператора разыменования * к «указателю на t» создает «переменную типа t».

Так что у нас есть?

void *bar = whatever; 
char *foo = *(char **)bar; 
  • bar является переменной типа "указатель на аннулированию".
  • foo является переменной типа «указатель на символ».
  • литье bar до char** считывает переменную bar и извлекает значение типа «указатель на пустоту». Затем это значение преобразуется в значение типа «указатель на указатель на символ».
  • Выделение этого значения создает переменную типа «указатель на символ».
  • Затем выбирается значение этой переменной, а значение присваивается переменной foo.

Имеют смысл?

+0

Да, спасибо, бар в этом случае был типа void * следовательно, литой на char ** – webduvet

8
*(char**)bar; 

В ролях bar - указатель к указателю на char и разыменование, которое вызывает указатель на char (т. Е. char*).

Помните, что указатели являются просто косвенными. Когда вы разыменования указателя вы «уронить звезду», то есть:

char ***p = ...; 
p -> char*** 
*p -> char** 
**p -> char* 
***p -> char 
1

Я не знаю, какой тип bar без броска, но здесь идет:

bar в настоящее время отливают в указатель указатель на char.

* до (char **) является «разыгрывающим» значение справа. В этом случае он возвращает указатель char *, удерживаемый в указателе местоположения, на bar.

Результатом «разыменования» является char * - указатель на символ, который присваивается переменной foo того же типа.

Смежные вопросы