指针作为函数形参

先来看两个程序

程序1

#include<stdio.h>  
void fun(int *p)  
{  
    int b=22;  
    p=&b;  
}  
int main(void)  
{  
    int a=1;  
    int *q;  
    q=&a;  
    printf("%d\n",*q);  
    fun(q);  
    printf("%d\n",*q);  
    return 0;  
} 

输出为
这里写图片描述

程序2

#include<stdio.h>  
void fun(int *p)  
{  
    *p=22;  
}  
int main(void)  
{  
    int a=1;  
    int *q;  
    q=&a;  
    printf("%d\n",*q);  
    fun(q);  
    printf("%d\n",*q);  
    return 0;  
} 

输出为
这里写图片描述

对于程序2,不难理解

程序1,明明改变了P的指向了,为什么还是输出1呢?
其实问题的关键不是指针作为形参的问题,而是函数传参的问题。

q作为形参进入fun函数时,不是q本身进入参数,而是克隆了一个指针变量,这个指针变量的值和q相等。
所以,在程序1中,只是克隆的指针变量的指向发生了改变,而q的指向并没有发生改变。

为了验证这一结论,看程序3
程序3

#include<stdio.h>  
void fun(int *p)  
{  
    printf("in fun, p=%p,p的地址&p=%p\n",p,&p);
    *p = 22;
}  
int main(void)  
{  
    int a=1;  
    int *p;
    p=&a;
    printf("%d\n",*p);        
    printf("in main, p=%p,p的地址&p=%p\n",p,&p);  
    fun(p);  
    printf("%d\n",*p);  
    return 0;  
} 

输出为
这里写图片描述
可看出,main中的p和fun中的p,值是一样的,但是是属于两个不同的指针变量。

参考自https://www.cnblogs.com/heat-man/p/4646051.html

  • 32
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值