Что означает ** (& d) в c? - PullRequest
0 голосов
/ 13 января 2019

наш учитель дал нам следующий код:

x = **(&d);

Его вопрос был: «Какие строки кодов вы должны добавить над этой строкой, чтобы код был правильным?»

Кто-нибудь может мне помочь? Что означает эта строка?

Ответы [ 2 ]

0 голосов
/ 13 января 2019
x = **(&d); 

эквивалентно

x = **&d; 

эквивалентно

x = *(*&d); 

также для любой переменной v this

v == *&v 

верно.

Из вышеизложенного следует, что

*&d == d

так

x = *(*&d); 

равно

x = *d;

Поскольку оператор разыменования * может применяться только к указателю, следует, что d должен иметь тип указателя

T * d; /* Let be T any type. This defined d to be pointer to that type T. */

Применяя к переменной типа T* оператор *, результат оценивается как сам тип T.

Как дано

x = *d

из этого следует, что x должен иметь тип T.

Таким образом, рассматриваемая строка должна быть

T x, *d;

или в более читаемой форме

T x;
T * d;

: -)

0 голосов
/ 13 января 2019

Замечание DeiDei возможно, я просто объясню больше здесь

Мы находимся в C, и для упрощения рассмотрим x и d не макросы.

x = **(&d); эквивалентно x = *d;, потому что для получения адреса разыменование ничего не делает

Теперь вопрос состоит в том, чтобы найти контекст, в котором x = *d; является допустимым, для этого d должен быть указателем. Пусть скажут int * d;

Вероятно, цель также состоит в том, чтобы не иметь ошибки сегментации, поэтому d необходимо запомнить действительный адрес. Пусть скажут int a; int * d = &a;

Теперь мы присваиваем x с *d, поэтому тип x должен быть совместим с int Пусть скажем int a; int * d = &a; x = **(&d);

Чтобы быть чистыми, мы не хотим получать доступ к неинициализированному значению, потому что x наконец получает значение a , которое должно быть инициализировано.

int a = 0; int* d = &a; int x; x = **(&d); от DeiDei совместимо с требованием, но, конечно, они являются множеством других решений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...