C语言指针:指针作为形参如何改变其指向的地址?

本文探讨了在C语言中如何通过函数改变传入指针的指向。通过实例解释了形参和实参的关系,指出在函数内部无法直接改变实参的值,但可以通过二级指针实现对指针指向地址的修改。文中详细分析了二级指针的工作原理,并展示了如何在函数中使用二级指针来改变传入指针的指向。
摘要由CSDN通过智能技术生成

题目是什么意思呢?就是一个函数的输入参数是一个指针,该函数需要改变该指针指向的地址,如: 现在有一个全局数组b,现在需要编写一个函数 输入参数是一个指针a,需要通过该函数将该指针a指向数组b,即:

int b[3] = {
   1,2,3};

void fcn(参数);

void main()
{
   
    int* a;
    fcn(输入参数a)

}

执行完fcn后,使参数的地址改变,这个功能怎么来实现呢?

首先说明结论:使用二级指针。

为了更好的理解这个问题,我们首先来学习一下指针最经典的例子,交换两个数来说明函数的形参和实参之间的关系。

首先来探究以下实参和形参的关系是怎样的。

形参为普通变量类型;

void test1(int a, int b)
{
   
   printf(">> formal addr a: %d, formal addr b: %d\n",&a,&b); //打印形参地址
   printf(">> formal value a: %d, formal value b: %d\n",a,b); //打印形参值
}


int main()
{
   
    int a = 1, b = 2;

    printf(">> actual addr a: %d, actual addr b: %d\n", &a,&b);
    printf(">> actual value a: %d, actual value b: %d\n",a,b);
    test1(a,b);

    return 0;
}

下面是执行结果:

>> actual addr a: 6422300, actual addr b: 6422296
>> actual value a: 1, actual value b: 2
>> formal addr a: 6422272, formal addr b: 6422276
>> formal value a: 1, formal value b: 2

可以看到形参和实参的值虽然相同,但是他们的地址却不相同,所以函数在被调用的时候传入的参数(实参)实际上是被复制到另一个地址(形参地址)中去了,函数中对传入参数的操作实际上是对形参地址中的数进行操作,而与实参无关。所以下面的函数不能实现交换两个数的功能。

void swap_1(int a, int b)
{
   
    <
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值