В приведенном ниже коде:Почему SizeOf (* узел) дают размер структуры, а не размер указателя
typedef struct{int data1; int data2} node;
node n1;
node* n2;
sizeof(n1) returns 8 // size of the struct node
sizeof(n2) returns 4 // since n2 is a pointer it returns the size of the pointer
sizeof(*n2) returns 8 // HOW DOES THIS WORK ?
Как SizeOf на самом деле работает? В приведенном выше случае * n2 сводится к тому, чтобы указать адрес, где указывает n2. n2 в этом случае по-прежнему является висящим указателем, поскольку у нас нет выделенной памяти, и мы не указываем ее на какой-либо действительный адрес. Как он правильно определяет размер структуры?
«* n2 сводится к тому, чтобы указать адрес, где n2 указывает», неверно. 'n2' является указателем на узел, значение' n2' является адресом узла, а '* n2' является узлом. –
Как указано выше. '* n2' указывает на то, что указывает' n2', а не «адрес, куда указывает n2». Фактически значение 'n2' само по себе является« адресом, где n2 указывает », потому что' n2' является указателем. – davmac
Иногда полезно писать 'sizeof * n2', чтобы напомнить себе, что' sizeof' - это оператор, а не функция. Кроме того, это хороший стиль. –