2013-12-10 2 views
0

Оба p и q являются node*. Но я немного смущен, что означает это задание?Каково значение этого назначения, p = q, где оба p и q являются указателями на структуру?

struct node 
{ 
    int value; 
    struct node *next; 
}; 

void rearrange(struct node *list) 
{ 
    struct node *p,*q; 
    int temp; 

    if (!list||!list->next) return; 

    p=list; 
    q=list->next; 

    while(q) 
    { 
     temp=p->value; 
     p->value=q->value; 
     q-value=temp;p=q->next; 
     q=p?p->next:0; 
    } 
} 
+0

можете ли вы разместить точный код? –

+0

является предметом отдельного вопроса? q - указатель на анод? и вы назначаете q на p? – Doon

+0

В коде, который вы отправили, был добавлен дополнительный '}'. Я удалил его. Но, пожалуйста, не стесняйтесь исправить мои изменения, если я ввел неточность. –

ответ

2

Ваше имя спрашивает о p=q, но в коде, который вы отправили, нет такого задания.

Назначение p=q; установит указатель p на такое же значение, что и указатель q. Таким образом, оба p и q указывают на то же место, место q указывает перед назначением.

В код содержится код q=p?p->next:0;. Это присваивает выражение p ? p->next : 0 - q. Выражение вычисляется следующим образом:

  • Если p не равен нулю, то значение выражения p->next.
  • Если p равно нулю, значение выражения равно 0.

Таким образом, присвоение эквивалентно «If p указывает на объект (не равен нулю), установите q в p->next. В противном случае установите q на ноль. "

+0

oh, по иронии судьбы, это была ошибка. Я фактически оценивал (q = p) и пытался придумать истину или ложь, вместо этого она будет оцениваться. Благодаря :-) –

0

Оба p и q будут указывать на одну и ту же структуру. Это разные названия структуры!

Смежные вопросы