指针、引用

正确定义指针变量:

定义后应给指针变量赋值才能用,即用p=&a;

 
 
int main() {
int a=5;
int *p;
p=&a;
  return 0;
}
错误:

未给p赋值就使用!*p指的是p所指向变量的内容。

int main() {
int a=5;
int *p;
*p=a;
  return 0;
}

链表:

在C语言中,一般都是通过指向头节点的指针来表示链表,这个头指针是链表的入口和起点,也代表了整个链表。那么,它本质上是什么,说到底无非是指针变量。在C++中,也可以定义一个类比如叫做SingleList表示单链表类,具体的链表实例是该类的具体对象,此时,链表的本质是什么?是类的对象。

链表中的引用:

在C语言中实现链表的时候,一般都会有个 init() 函数,其功能就是对链表进行初始化,简单的动作就是将链表的头指针置位NULL,就构造了一个空链表。所以,该函数的入口参数肯定得有一个链表的头,在函数里面才能将其设置为NULL。假设,我们这样来写,

void init(Node *head)
{
head = NULL;
}
在main函数里面调用的时候,
int main(void)
{
Node *head;
init(head) ; /* 初始化一个空的链表 */
return 0;
}
上面带注释的那句代码执行之后,head 就真的变成NULL了吗?不是吧?你想,Node *head;这一句,head现在是随机值,传给init函数之后,虽然在init()函数内部更改成了NULL,但它修改的是init中的局部变量,仅仅是形参变量而已,其实在函数执行完毕之后,main函数中的head没有任何变化。这就无法实现初始化空链表的功能了。
可行的方案,就是用引用。定义成下面这样
void init( Node * &head) 或者用指向指针的指针 void init(Node **phead)
使用引用的时候,main中用init(head)就行了,使用二维指针时,main中要写成init(&head);


猜你喜欢

转载自blog.csdn.net/wangqianqianya/article/details/79831754
今日推荐