美文网首页
函数调用改变指针指向

函数调用改变指针指向

作者: mark_x | 来源:发表于2019-08-18 17:03 被阅读0次

指针mp原本指向变量a,希望使用子函数改变指针指向,使其指向变量b。判断以下代码是否正确?

// 测试用函数调用 改变指针指向
#include <stdio.h>

int a = 520;
int b = 100;

void changePrt(int *sp)
{
    sp = &b;
}

int main(void)
{
    int *mp = &a;
    printf("*mp_before = %d\n", *mp);
    
    changePrt(mp);  
    printf("*mp_after = %d\n", *mp);
    return 0;
}

期待结果为:
*mp_before = 520
*mp_after = 100
但实际上是:
*mp_before = 520
*mp_after = 520

仔细分析代码可以知道,指针sp是局部变量,这里只是使用局部指针变量接收了mp的值,也就是变量a的地址,语句sp = &b改变的是局部变量的值,不会影响mp的指向。

正确做法:使用二级指针
改变指针指向也就是改变指针的值,根据改变谁的值就传递谁的地址,因此应该传递指针的地址,使用二级指针接收。

// 测试用函数调用 改变指针指向
#include <stdio.h>

int a = 520;
int b = 100;

void changePrt(int **sp)
{
    *sp = &b;
}

int main(void)
{
    int *mp = &a;
    
    printf("*mp_before = %d\n", *mp);
    
    changePrt(&mp);  // 要修改指针的值,因此要传入二级指针
    
    printf("*mp_after = %d\n", *mp);
    
    
    return 0;
}

使用二级指针sp接收指针mp的地址*sp=&b,通过对mp的地址解引用,改变了mp的值,调用结束后,局部变量sp消失,但mp的值被改变了。
结果:

函数调用结果

相关文章

  • 函数调用改变指针指向

    指针mp原本指向变量a,希望使用子函数改变指针指向,使其指向变量b。判断以下代码是否正确? 期待结果为:*mp_b...

  • 二级指针的作用

    二级指针的作用应该是体现在函数调用方面。 函数调用中: 如果想在被调函数中改变主调函数中指针所指向的地址存储的内...

  • C++面向对象高级编程(下)-第二周-博览网

    对象模型 指针指向子类,通过指针调用虚函数,自动调用子类的虚函数实现, 指针调用虚函数时,不做静态绑定,做动态绑定...

  • call、apply和bind

    call、apply作用:调用函数,改变函数的this指向bind作用:不会调用函数,改变函数this指向,返回原...

  • C++:函数指针 & 返回函数指针的函数

    函数指针 & 返回函数指针的函数 一、函数指针的声明和使用 声明一个函数指针,给它赋值并调用它指向的函数 函数指针...

  • C++:函数指针

    函数指针:是一个特殊的指针,用于指向函数。和通过函数名调用一样,函数指针给我们提供了另一种调用函数的可能。函数指针...

  • 第十章 对象和类(4)this指针和对象数组

    (四)this指针和对象数组 1.this指针是调用函数的对象的地址 this指针指向用来调用成员函数的对象,t...

  • 一道关于JS作用域的面试题

    函数在被直接调用的时候,其中的this指针永远指向window 匿名函数 this总是指向window对象 谁执行...

  • 9月4日

    1.指针的指针,双重指针是处理在调用函数时改变指针指向 2.字符与数字的转换,当要对1-9单个数字进行处理,可以字...

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

网友评论

      本文标题:函数调用改变指针指向

      本文链接:https://www.haomeiwen.com/subject/hdpksctx.html