指针操作 和链表

来源:互联网 发布:mac校园网客户端 编辑:程序博客网 时间:2024/05/18 00:33

若p1和p2是指针变量那么p1=p2 会修改p1的值使其指向p2 当前所指向的东西。

使用new会为动态变量保存一个特殊的内存区域,自由自由存储区,也称堆。

为一个指针变量使用delete 时候 它所指向的动态变量会被销毁,之后指针变量进入未定义的状态,也就是说你不知道它指向哪里,也不知道它指向的地方有什么价值,如果另一个指针变量指向被销毁的动态变量,那个指针变量也会进入为定义的状态,这些未定义的指针变量成为虚悬指针。假定p 是一个虚悬指针,那么提领操作符*应用与p 生成*p将产生不可预料的结果。


链表 的指针指向的是整个节点,而不是只想节点内部的某个单独的项目。

(*head).count=12;
原点操作符的优先级高于提领操作符。
箭头操作符->合并了提领操作符和原点操作符。
head->count=12;
链表的第一个节点称为表头(head) 我们将第一个指向表头的指针变量命名为head  名为head的指针本身并不是表头,它只是指向表头。
struct Node{ int data;Node *link;};typedef Node* Nodeptr;void head_insert(Nodeptr& head,int the_number);void head_insert(Nodeptr& head,int the_number){Nodeper temp_ptr;temp_ptr=new Node;//申请空间temp_ptr->data=the_number;temp_ptr->link=head;head=tem_ptr;//指向head 节点       }
为了避免节点丢失,程序必须一直让某个指针指向表头,通常就是head 中的那个指针。
struct Node{ int data;Node *link;};typedef Node* Nodeptr;void search(Nodeptr head,int target);void search(Nodeptr head,int target){Nodeper here=head;if(here==null){return null};else{while(here->link!=null&&here->data!=target)here=here->link;if(here->data==target)return here;else return null;}}