typedef структура и указатель - PullRequest
0 голосов
/ 20 мая 2018

Когда у нас есть:

      struct node{.....}
      typedef struct node Node;
      typedef Node *ptr;

Является ли ptr указателем на узел структуры или typedef меняет его значение?

1 Ответ

0 голосов
/ 20 мая 2018

Определение

typedef struct node *ptr;

сделает ptr псевдонимом для struct node *.

После этого вы можете сделать либо

struct node *some_pointer;

Или

ptr some_pointer;

Оба будут определять переменную some_pointer как указатель на структуру node.

Но делает псевдонимы типа для указателятипы не то, что я рекомендую.Это может затруднить чтение, понимание и сопровождение кода.

Возьмем, к примеру, наиболее распространенную проблему, которую я видел здесь при переполнении стека, когда речь идет о псевдонимах типов указателей:

ptr some_pointer = malloc(sizeof(ptr));

Это выделяет память, достаточную для указателя на структуру, а не для всей структуры.Если вы используете, например,

Node *some_pointer = malloc(sizeof(Node*));

, эта ошибка будет намного яснее и проще для поиска.

См. Является ли хорошей идеей указывать указатели по умолчанию?

...