将指针变量设置为多个值

时间:2015-10-21 13:05:45

标签: c++ pointers variable-assignment

我正在处理使用自定义链接列表类的代码。列表类具有以下功能:

void linkedList::expire(Interval *interval, int64 currentDt)
{
    node *t = head, *d;
    while ( t != NULL )
    {
        if ( t->addedDt < currentDt - ( interval->time + (((long long int)interval->month)*30*24*3600*1000000) ) )
        {
            // this node is older than the expiration and must be deleted
            d = t;
            t = t->next;

            if ( head == d )
                 head = t;

            if ( current == d )
                 current = t;

            if ( tail == d )
                 tail = NULL;

             nodes--;
             //printf("Expired %d: %s\n", d->key, d->value);
             delete d;
         }
         else
         {
            t = t->next;
         }
     }
}

我不明白的是函数中的第一行代码:

node *t = head, *d;

这段代码是如何编译的?如何为单个变量分配两个值,或者这是一些简写快捷方式? head是* node类型的成员变量,但在其他任何地方都找不到。

2 个答案:

答案 0 :(得分:4)

这是两个定义, comma operator 1 。它们相当于

node* t = head;
node* d;

1 逗号运算符在C ++中具有所有运算符的最低优先级,因此调用它需要parantheses:

node* t = (head, *d);

如果d类型为node**,则此方法可以正常使用。

答案 1 :(得分:0)

通常在c ++中,您可以列出多个用逗号分隔的定义:

int a,b,c,d;

将定义4个整数。危险在于指针的处理方式可能不那么明显:

int* a,b,c,d;

将声明一个指向int的指针,剩下的就是整数。因此,在样式中声明指针的非常罕见的做法是:

int *a, *b; 

声明了两个整数指针。