若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;}
}