zoukankan      html  css  js  c++  java
  • 指针的问题

    我们都知道指针是用来操作内存空间的,我们可以简单的拿来改变某个变量的值

    如:我们定义一个int a = 5;

    然后定义一个指针int *p;

    将change(&a);利用这个调用函数change();

    用函数int change(int *p){*p = 10;return 1;}

    输出结果会是:a = 10;

    这就是利用一个简单的指针来改变了内存空间的值将5 改成了10,这就进一步说明指针是用来改变内存空间的值的。

    接下来我们讨论*p,与**p的问题

    很容易理解:*p是指针,**p是指针的指针嘛,是的,但我们要知道,第一个*P是拿来改变某一个内存空间的值的

    如刚讲的内存空间a一样,而**P 是改变指针的指针的内存空间的,即改变指针的指针的指向问题,因为改变的是

    该指针的的内存的值,即,指针的指向问题就改变了,当我们申请内存空间的时候会遇到两种情况:

    *head:

    head = (SLNode*)malloc(sizeof(SLNode));

    **head:

    *head = (SLNode*)malloc(sizeof(SLNode));

    这两种情况不一样,第一种情况,你若使用在初始化函数中,你需要return head;这样你才能获得该地址;而

    第二种情况就不用了因为你操作的是*head这个地址空间,改变了其值,使其指向改变,但你仍然知道你传入

    的地址,这样你就可以继续找到,操作该空间了。

    下面举了一个例子:

    #include <iostream>
    using namespace std;
    int change(int **p,int *p2){
    *p = p2;
    }

    int main(){
    int a = 5;
    int b = 10;
    int *p1 ;
    p1 = &a;
    cout<<"改变前:"<<*p1<<endl;
    change(&p1,&b);
    cout<<"改变后:"<<*p1<<endl;
    return 0;
    }

  • 相关阅读:
    【Oracle】安装
    【Java】String,StringBuffer与StringBuilder的区别??
    【Java】基本数据类型长度
    静态构造函数
    【算法】递归算法
    【JavaScript】JavaScript教程之------------------JavaScript实现
    【Android】listview优化
    【JAVA EE企业级开发四步走完全攻略】
    Eclipse下Tomcat插件的安装
    Android工具
  • 原文地址:https://www.cnblogs.com/qpxv/p/3733999.html
Copyright © 2011-2022 走看看