我试图用链表制作多个数组。 因此,一个链表列表会收集其他链表。
然而,当我把链表头部地址 转换为int变量然后放入int变量 回到指针。
指针保持相同的地址,但指针的值不同 前)
&(list.head) : 0x0032FAFAC
*(list.head) : 10
pointer : 0x0032FAFAC
*pointer : 1530784
我删除了不必要的代码。 程序是
TotalList添加列表头。
转到插入功能。
转到Print2函数并将列表头地址赋给指针。
指针的值与前一个值不同。
我等着你的回答。谢谢。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int key;
struct node* next;
};
struct Linkedlist
{
struct node* head;
int (*Search)(struct node** head, struct node** pNode, struct node** nNode);
int (*Insert)(struct node** head, int data);
int (*Delete)(struct node** head);
int (*Print)(struct node** head);
int (*Print2)(struct node** head);
int (*Move)(struct node** head);
};
int Insert(struct node** head, int data)
{
struct node* newNode;
struct node* temp;
struct node* temp2;
newNode =(struct node*)malloc(sizeof(struct node));
newNode->key=data;
printf("address in int variable (Insert function) : %p\n",data);
newNode->next=0;
if((*head)==NULL)
{
(*head)=newNode;
return 1;
}
else if(Search(head,&temp,&temp2)==1)
{
temp->next=newNode;
return 1;
}
else
return 0;
}
int Print2(struct node** head)
{
struct node* temp = (*head);
int* kp;
while(temp!=NULL)
{
printf("Linked list key : %p\n",temp->key);
kp=temp->key;
printf("value of pointer with Linked list key : %d \n",*kp);
//tail을 찾았을 경우
if(temp->next==NULL)
{
printf("\n");
return 1;
}
temp=temp->next;
}
return 0;
}
int main()
{
struct Linkedlist list;
struct Linkedlist list2;
struct Linkedlist list3;
struct Linkedlist TotalList;
Linkedlist_init(&list);
Linkedlist_init(&list2);
Linkedlist_init(&list3);
Linkedlist_init(&TotalList);
list.Insert(&(list.head),10);
list.Insert(&(list.head),20);
list.Insert(&(list.head),30);
list.Insert(&(list2.head),40);
list.Insert(&(list2.head),50);
list.Insert(&(list2.head),60);
list.Insert(&(list3.head),70);
list.Insert(&(list3.head),80);
list.Insert(&(list3.head),90);
printf("&(list.head) : %p\n",&(list.head));
printf("&(list2.head) : %p\n",&(list2.head));
printf("&(list3.head) : %p\n",&(list3.head));
printf("*(list.head) : %d\n",*(list.head));
printf("*(list2.head) : %d\n",*(list2.head));
printf("*(list3.head) : %d\n",*(list3.head));
TotalList.Insert(&(TotalList.head),&(list.head));
TotalList.Insert(&(TotalList.head),&(list2.head));
TotalList.Insert(&(TotalList.head),&(list3.head));
list.Print(&(list.head));
list.Print(&(list2.head));
list.Print(&(list3.head));
TotalList.Print2(&(TotalList.head));
//printf("%d\n",list.Delete(&(list.head)));
//list.Print(&(list.head));
return 0;
}
结果:
&(list.head) : 003DFE34
&(list2.head) : 003DFE10
&(list3.head) : 003DFDEC
*(list.head) : 10
*(list.head) : 40
*(list.head) : 70
address in int variable (Insert function) : 003DFE34
address in int variable (Insert function) : 003DFE10
address in int variable (Insert function) : 003DFDEC
10 20 30
40 50 60
70 80 90
Linked list key : 003DFE34
value of pointer with Linked list key : 2117552
Linked list key : 003DFE10
value of pointer with Linked list key : 2104160
Linked list key : 003DFDEC
value of pointer with Linked list key : 2104328
答案 0 :(得分:1)
&amp; a显示
的地址* a显示查看地址时的值
所以在这种情况下:
&(list.head) == pointer
(list.head) == *pointer
*(list.head) == **pointer
答案 1 :(得分:0)
&(list.head) : 0x0032FAFAC
*(list.head) : 10
pointer : 0x0032FAFAC
*pointer : 1530784
这里缺少间接步骤。 (list.head)
也是一个指针,其值为1530784
。
因此,&(list.head)
是指针list.head
的地址。它总是一样的。
(list.head)
是该指针的值。它可以改变,但它不会在你的程序中。 *(list.head)
是指向的对象的值,即10。