zoukankan      html  css  js  c++  java
  • 通过指针形参修改实参的值2

    注意:图示使用的地址只是假设的,并不是真正的内存地址,只是说明原理

    上次说到的是修改基本类型的变量,这次来说修改指针变量的值

    #include <stdio.h>  
    
    void change(int *a)
    {
        int temp = 555;
        a = &temp;
    }
    
    int main()
    {
        int i = 5;
        int *p = &i;
    
        printf("%p
    ", p);
    
        change(p);//并没有修改成功p的值
        printf("%p
    ", p);
    
        getchar();
    
        return 0;
    }

    ppp

    原因还是和以往一样,函数只是改变了a的指向,并没有影响到p

    1

    既然p是一个变量,那么要改变它就要通过传递它的地址找到它,然后修改内存数据,修改程序为

    #include <stdio.h>  
    
    void change(int **a)
    {
        int temp = 555;
        printf("%p
    ", &temp);
        *a = &temp;
    }
    
    int main()
    {
        int i = 5;
        int *p = &i;
    
        printf("%p
    ", p);
    
        change(&p);
        printf("%p
    ", p);
    
        getchar();
    
        return 0;
    }

    ppp

    可以看到,成功改变了p的值,再看看内存的结构图,函数刚开始运行

    1

    修改了*a,就是修改了p的内容,修改完后p的地址是temp的,p也指向了temp

    1

  • 相关阅读:
    Linux命令:ssh
    Linux命令:sshpass
    Linux命令:ls
    Linux文件的时间
    Linux命令:findutils
    jfrog
    git
    git branch
    git remote
    java equals 和hashcode
  • 原文地址:https://www.cnblogs.com/acgpiano/p/4017964.html
Copyright © 2011-2022 走看看