Небольшая проблема с указателем C - PullRequest
0 голосов
/ 06 июня 2018

Будет ли это устанавливать user_id (который является полем 'int' (то есть не указателем)) в (указателе на) узлах структуры [i], чтобы иметь значение, равное user_id в структуре пользователей [i]?

nodes[i]->user_id = &users[i].user_id;

Или этот синтаксис работает?

nodes[i]->user_id = users[i].user_id;

Очевидно, меня немного смущает вопрос о том, является ли левая сторона указателем или значением здесь.

1 Ответ

0 голосов
/ 06 июня 2018

В C указатель используется для ссылки на адрес объекта в памяти:

int *pointerToFirstIndexOfArray = users[0]; // The int * value now points to the location in memory

Один использует & значение, чтобы получить фактическое значение адреса в памятивместо того, чтобы просто указать местоположение:

int a = 0;
int &b = a; // B is now a reference to A, since B is literally the address in memory of where A is located

Наконец, использование -> является сокращенной записью (*).:

(*users[i]).valueInsideUserStruct = someValue; // these statements are equal
users[i]->valueInsideUserStruct = someValue; // these statements are equal

C делает это, потому что легчечитайте var-> val вместо (* var) .val

Чтобы ответить на ваш вопрос, первый отправленный вами код изменяет только значение на адрес (оператор & буквально возвращает адрес), в то время как второй код, который вы опубликовали, фактически меняет значение на значение по адресу .

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