Помните, что a->data
является сокращением для (*a).data
, где a
- указатель на структуру или объединение, и нам нужно разыменовать указатель, прежде чем мы сможем получить доступ к data
члену.Графически:
node * node
+---+ +---+
a: | | ----> | |
+---+ +---+
...
+---+
| | data
+---+
...
Таким образом, (*(*A)).data
эквивалентно (*A)->data
.
Исходя из определения swapNode
, похоже, что он будет назван следующим образом:
node x, y;
...
node *xp = &x;
node *yp = &y;
swapNode( &xp, &yp );
Что имеет смысл, если вы меняете указатель значения (установка xp
для указания на y
и yp
для указания на x
), но это не то, что делает swapNode
;все, что он делает - это заменяет элемент data
между двумя экземплярами узла.
По любой причине, кто бы ни написал этот код, решил добавить совершенно ненужный уровень косвенности.Это будет работать так же хорошо, если написано
void swapNode(node* A, node* B)
{
worker temp = A->data;
A->data = B->data;
B->data = temp;
}
и называется
node x, y;
...
swapNode( &x, &y );