zoukankan      html  css  js  c++  java
  • (2)链表中的一级指针和二级指针的问题

    网址:http://blog.csdn.net/u012434102/article/details/44886339

      

    摘抄:

      

     1 #include <iostream>    
     2 #include <string.h>    
     3 using namespace std;    
     4 
     5 void fun1(char* str)    
     6 {    
     7     str = new char[5];    
     8     strcpy (str, "test string");    
     9 }    
    10 
    11 void fun2(char** str)    
    12 {    
    13     *str = new char[5];    
    14     strcpy (*str, "test string");    
    15 }    
    16 
    17 int main()    
    18 {    
    19     char* s = NULL;        
    20     cout << "call function fun1" << endl;    
    21     fun1 (s);    
    22     if (!s)    
    23         cout << "s is null!" << endl;    
    24     else    
    25         cout << s << endl;    
    26 
    27     cout << "call function fun2" << endl;    
    28     fun2 (&s);    
    29     if (!s)    
    30         cout << "s is null!" << endl;    
    31     else    
    32         cout << s << endl;    
    33     return 0;    
    34 } 
    1 分析:
    2 
    3 在fun1中,当调用str = new char[5]时,str和s已经没什么关系了,相当于在fun1中复制了一个指针,这个指针指向的空间存储了字符串“test string”,但s仍指针NULL。当调用fun2时,因为是二级指针,s指向str,这里*str = new char[5],*str就是s,所以给*str分配空间就是给s分配空间。这样解释应该就很清楚了。
    4 
    5 画图为例:
    6 
    7 fun1执行时

    我的理解:

          就是其实传的一级指针就是一个数,就是传值,只不过是传的大小是地址那么长,二级指针之所以改变了所指的内容,是因为再传的那个地址里面存的还是一个地址,所以,才会起作用。总之,看你想改变谁的值,要是你想改变一个指针里面存的值,那么肯定用指针的指针才可以啊,要是一个整型数据,就是一个整型指针就可以了,要是改一个整型指针里面的值,那么就得是整型指针的指针。

    fun2执行时

    1 如图所示,在fun1种str是s的拷贝,给str分配空间跟s没有关系,在fun2种str是二级指针,指向s,能够通过控制*str从而给s分配空间。
    2 
    3 后记
    4 
    5 用框图表示链表中二级指针或者一级指针的使用更加直白了。
    6 
    7 1,二级指针创建头指针。
    8 
    9 a.只有头指针,没有头结点 

    b,有头指针,也有头节点

    c,而如果不用二级指针,直接传一个一级指针,相当于生成L的拷贝M,但是对M分配空间与L无关了。

     

    2,二级指针销毁头指针

     

  • 相关阅读:
    4.6--4.9
    4.表达式和运算符
    3.9--3.10
    3.8
    泛型(Generic)
    容器
    String,StringBuffer
    数组
    异常,自定义异常,异常重写
    多态,抽象类和抽象方法,接口
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/7470836.html
Copyright © 2011-2022 走看看