link_list

链表的结构

struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
};

向链表中添加元素

void addToTail(ListNode **pHead, int val){
    ListNode *temp = new ListNode(val);

    if(*pHead == NULL){
        *pHead = temp;
    }else{
        ListNode *p = *pHead;
        while(p->next){
            p = p->next;
        }
        p->next = temp;
  }
}

上面传入的是二级指针,如果是一级指针会怎样 如果是一级指针,当head为NULL的时候,退出函数后,head仍然是NULL

#include<iostream>  

using namespace std;  

int a= 10;  
int b = 100;  
int *q;  

void func(int *p)  
{  
    cout<<"func:&p="<<&p<<",p="<<p<<endl;  //note:3  
    p = &b;  
    cout<<"func:&p="<<&p<<",p="<<p<<endl;  //note:4  
}  


int main()  
{  
    cout<<"&a="<<&a<<",&b="<<&b<<",&q="<<&q<<endl;  //note:1  
    q = &a;  
    cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl;  //note:2  
    func(q);  
    cout<<"*q="<<*q<<",q="<<q<<",&q="<<&q<<endl;  //note:5  

    system("pause");  
    return 0;  
}

输出结果为:

&a=0032F000,&b=0032F004,&q=0032F228
*q=10,q=0032F000,&q=0032F228
func:&p=0018FD24,  p=0032F000
func:&p=0018FD24,  p=0032F004
*q=10,q=0032F000,&q=0032F228

执行函数后,*q的值没有变成100;在上面可以看出,当把指针作为函数参数时,会产生一个临时变量,指向与传入指针相同的地址处。对这个临时指针的修改并不能修改实参指针的值。

results matching ""

    No results matching ""