2016-12-11 6 views
2

я хотел бы понять использование обоих? то, что я понимаю, сейчас это Node *root является ссылкой на корень указатель на объект узла с другой стороны Node* root является указателем на узел сам (позволяют передавать по ссылке)разница между Node * root и Node * root

+5

Предполагая, что это C, то они одинаковы. –

+0

Нет такой вещи, как «ref» в C. –

+0

Они оба одинаковы, и что они означают, это то, что root является указателем, который является указателем на тип узла.Это означает, что теперь root сможет хранить адрес переменной, тип данных которой также является Узлом. Когда мы говорим, что переменная является указателем, например, в вашем примере, это означает, что указатель, который вы указали, сможет хранить адрес памяти других переменных, которые относятся к типу, с которым был объявлен этот указатель. То, что указывает, означает (для хранения адресов других переменных или мест памяти). –

ответ

11

Расстояние не имеет значения в этом определении, вы можете написать все следующие взаимозаменяемые, все они определяют root как указатель на Node:

Node*root; 

Node *root; 

Node* root; 

Node * root; 

Node      *root; // I have seen that! 

Node 
* 
root 
; 

Node(((*(root)))); // yes, this is allowed too! 

\  
N\ 
od\ 
e*r\ 
oot ;   // ASCII art style: a corner case ;-) 

Это вопрос стиля, который вы предпочитаете использовать. Просто имейте в виду эти соображения:

  • Читаемость очень важно избегать глупых и тончайших ошибок и сделать код легче поддерживать, будь то от себя или других.

  • Консистенция является ключом к считыванию кода: выберите один стиль и используйте его везде.

  • Node * root выглядит как умножение, оно имеет тенденцию создавать путаницу.

  • Лавировать к * до конца типа создает путаницу, если объявить несколько переменных в одном операторе:

    Node* root, tree; // defines a pointer root and a structure tree. 
    

    , тогда как

    Node *root, *tree; // defines 2 Node pointers root and tree. 
    

    Это является причиной того, многие программисты предпочитают лавировать * к идентификатору в объявлениях.

    Использование typedef для скрыть указатель природы с typedef Node *Nodeptr; или хуже typedef Node *List; стремится быть подверженными ошибкам и создать еще больше путаницы в обеих Программистах и ​​разум читателя.

4

node *foo и node* foo идентичны компилятором.

!! Fun !! мелочи, которые вы, возможно, не знаете. Когда вы пишете, что выглядит как объявление нескольких указателей:

int* a, b; // two int*, right? 

Что видит компилятор объявления для указателя Int и междунар:

int *a; 
int b; 

Чтобы объявить несколько указателей в одном операторе вы должны дать каждая из которых является *:

int *a, *b; 

или

int* a, * b; 
Смежные вопросы