0
void insert_end()
{
    struct node *nn=(struct node*)malloc(sizeof(struct node));
    printf("Enter the data:");
    scanf("%d",&nn->info);
    nn->next=NULL;
    if(first==NULL)
    {
        first=nn;
        first->next=first;
    }
    else
    {
        temp=first;
        while(temp->next!=first)
            temp=temp->next;
        temp->next=nn;
        nn->next=first;
        printf("The address of the first node is %d", first);
        printf("The address of the last node is %d", nn->next);
    }
}

这是一个循环链表,C 中的插入函数。

我需要证明第一个节点的地址和最后一个节点的链接部分具有相同的值,从而表明它是一个循环链表。

但是我上面的代码给出了随机整数值..!

4

3 回答 3

7

您可能想要打印地址%p

    printf("The address of the first node is %p",first);
    printf("The address of the last node is %p",nn->next);
于 2013-11-07T12:26:27.910 回答
2

您可以便携打印的唯一地址是空指针。这不是一个很大的限制,因为您可以将任何对象指针转换为 void 指针并返回。printfptr-to-void的说明符是%p

printf("The address of the first node is %p\n", (void *)first);
printf("The address of the last node is %p\n", (void *)nn->next);

请注意,(void *)强制转换是避免未定义行为所必需的

于 2013-11-07T13:32:21.333 回答
0

printf("最后一个节点的地址是&d,nn->next);

这是不正确的。尝试使用以下内容打印指针变量的地址。


     printf("最后一个节点的地址是0x%p",nn->next);

    /*
       以下将无法正确打印
       如果 sizeof(int) != sizeof(void*)
    */
    printf("最后一个节点的地址是0x%x",nn->next);

此处列出了常用的格式说明符。

于 2013-11-07T13:12:30.480 回答