Что делает присвоение значения функции, которая возвращает указатель, в C?* Функция = значение - PullRequest
0 голосов
/ 04 февраля 2019

Итак, я смотрю на на , и парень постоянно использует

uint32_t *internalNodeNumKeys(void *node)
{
    return (uint32_t *)(node + INTERNAL_NODE_NUM_KEYS_OFFSET);
}

*internalNodeNumKeys(root) = 1;

Что это делает?Где-то я помню, как он говорил, что, поскольку эти функции возвращают указатели, их можно использовать как установщики, но что они устанавливают?

1 Ответ

0 голосов
/ 04 февраля 2019

Функция возвращает указатель на int, выражение *internalNodeNumKeys(root) = 1; анализируется как:

*(internalNodeNumKeys(root)) = 1;

Постфиксные операторы, такие как (), для связывания вызова функции более плотно, чем префиксные операторы, такие как * для разыменования.

Обратите также внимание, что internalNodeNumKeys очень непереносим:

  • Выполнение арифметики с указателями на void указатели непереносимы, node должен быть приведен как(unsigned char *) перед сложением.
  • Приведение произвольного смещения к объекту, указанному node в качестве указателя на int, может иметь неопределенное поведение, программист в этот момент играет с огнем.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...