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

  • 相关阅读:
    The Hungarian algorithm Template
    用二进制方法求两个整数的最大公约数(GCD)
    <climits>头文件使用方法
    开大Stack的一个小技巧
    2014 HDU多校弟五场J题 【矩阵乘积】
    2014 HDU多校弟五场A题 【归并排序求逆序对】
    POJ 2449 求第K短路
    UVALive 6467 Strahler Order 拓扑排序
    POJ 1041 John's trip 无向图的【欧拉回路】路径输出
    Ural 1450 求最长路 SPFA
  • 原文地址:https://www.cnblogs.com/qpxv/p/3733999.html
Copyright © 2011-2022 走看看