2

次のコードに疑問があります。

私は次のような機能を持っています、

void deleteNode(struct myList ** root)
{
  struct myList *temp;
  temp = *root;
  ...//some conditions here
  *root = *root->link;   //this line gives an error
  *root = temp->link;    //this doesnt give any error
 }

したがって、2つの行の違いは何ですか、私にとっては同じように見えます。エラーは、

error #2112: Left operand of '->' has incompatible type 'struct myList * *'

ありがとうございました :)

4

1 に答える 1

7

ここでの問題は、「->」演算子が「*」演算子よりも強く結合していることです。だからあなたの最初の声明:

// what you have written
*root->link;

次のように評価されています:

// what you're getting - bad
*(root->link);

それよりも:

// what you want - good
(*root)->link;

root はポインターへのポインターであるため、-> 演算子は意味をなさないため、エラー メッセージが表示されます。

于 2012-04-13T06:30:31.853 に答える