单链表图像
嘿,朋友们,我对上面的图片有点困惑。1000,800,1400和1100是内存地址,所以让我们将其设置为H1000, H800, H1400, h100。
1. 上面所有内存地址的内容只有INFO,还是INFO和LINK?
2. P只指向INFO,还是两者都指向?
3.P指向H1000?
4. 如果我输入P,它会显示H1000?
5. R只指向LINK,还是同时指向LINK和INFO?
6. 如果我打印R,会显示LINK或者H800的内存地址吗?
7. 是P->链接一个正确的语法,因为P只是一个指针?
8. R->LINK是正确的语法,因为R只指向LINK?
指针指向INFO和LINK组合在一起的结构体。从指针,编译器将知道如何访问字段INFO和LINK,分别表示为P->INFO和P->LINK。
很可能p ->INFO中的值和p ->INFO的地址是相同的,p ->LINK的地址与p ->INFO的地址有一个恒定的偏移量,但是你不应该关心这个
哇。这是一张没有任何背景的无用图片。
但一般来说,C语言中的链表是一组节点,每个节点包含指向一些有用信息(你想要存储在链表中的元素)的指针和指向列表中下一个元素的指针——如果有的话。
struct node {
void* info;
void* link;
};
所以,p (Q, R和S)是指向struct node
的指针,所以通过p->info
可以访问该元素,通过p->link
可以知道列表中的下一个元素是什么。
我假设你的问题的数据结构是
struct Node {
Info info;
Node *link;
}
Node* p = new Node(15); // node 1
Node* q = new Node(27); // node 2
Node* r = new Node(22); // node 3
Node* s = new Node(17); // node 4
我不打算一个一个回答。
p、q r、s和link具有相同的类型,它们都是指针。p将指向一个节点它有信息和链接。你对这幅图有误解。
当你打印p时,你当然会看到地址,因为它们都是指针。它们只能包含地址而不能包含值。
当你看到p->link时,我们可以说"指针p指向指针link"。您将看到链接的地址。它具有与节点相同的地址1
R->link
指向与
相同的地址S->link
.
R->link
也指向与
相同的地址Q->link
和
P->link->link
是节点3
如果你理解这个概念,这意味着你可以通过以下方式指向节点4:
P->link->link->link
Q->link->link
R->link->link
S->link