怎样分清指针所占用的内存空间”和“指针指向的内存空间呢?
指针变量需要存储它所指向的内存地址,涉及到存储就需要空间,例如在64位程序中,任何一个指针变量都占用64位即8字节的内存空间。而指针所指向的内存空间,指的是根据指针变量中存储的内存地址寻址到对应位置的内存空间。这就好比房间和门牌号的关系,门牌号需要写在一个牌子上,这个牌子就是指针变量所占用的内存空间,而房间本身则是指针变量指向的内存空间。
例如创建一个1234的链表。
link * initLink(){
link * p=NULL;//创建头指针
link * temp = (link*)malloc(sizeof(link));//创建首元节点,可以理解为创建了一个房间并把门牌号也写上了。
//首元节点先初始化
temp->elem = 1;指的是temp这个指针指向的那个房间的操作
temp->next = NULL;
p = temp;//头指针指向首元节点现在p也是那个房间的门牌号
//从第二个节点开始创建
for (int i=2; i<5; i++) {
//创建一个新节点并初始化
link *a=(link*)malloc(sizeof(link));和temp一样创建的是一个新房间,a是他的门牌号
a->elem=i;
a->next=NULL;
//将temp节点与新建立的a节点建立逻辑关系
temp->next=a;
//指针temp每次都指向新链表的最后一个节点,其实就是 a节点,这里写temp=a也对
temp=temp->next;
}
//返回建立的节点,只返回头指针 p即可,通过头指针即可找到整个链表
return p;
}