struct Node
{
int a,b;
};
上面定义了这样一个结构体
struct Node t = {1,2};
我们需要先理解这句话的含义。这样进行一个初始化,那么{1, 2},你可以认为是内存中的某块区域已经分配给你了,其中的值就是{1, 2}。而前面的t呢,就是这结构体的副本了,你可以认为t就是这个结构体。
struct Node *p;
这里和上面就不一样了。他是一个指针了。而且是一个指向的类型被限定为Node的指针。指针的意思就是指向哪一块内存区域。
我们这里要做的就是让他指向上面那个结构体。
还记得取地址符吗?我们可以通过它来获取结构体的在内存中的位置。&t
所以p直接指向这个地址就可以了 。
p = &t;
为什么可以这样做呢?就需要理解指针了。当你定义了一个指针后,上面的p就是指向的地址,p*就是内存地址中的值了。
那么现在p就指向{1, 2}的那快内存空间了。怎么从中取出这两个数呢?
p -> a;
这个就是{1, 2}中的1了。
其实就是p->a中包含了两个指向。p是指向{1,2}的那块区域,->a又是指向这块区域中的1。(这里我思考了一会,发现结构体中的 int没有用指针的形式定义,所以p->a就是直接指向1了。
所以->其实也相当于指针,只不过指向的是结构体自身的元素在内存中的位置。