c语言:指针变量的实参与形参

最近遇到一个坑,让我对实参和形参有了更深的了解。

假如在main方法中有一个指针变量p,它指向的内存地址为20000。现在将它传递到一个函数中,在这个函数里让它指向内存地址为20048。当函数执行完返回到main函数时,p所指向的地址还是20000,而不是20048。

看下面的代码:

#include<stdio.h>

void A(int* p){//此处p为形参
	int x = 3;
	p = &x;
	printf("在函数中p中的地址为%d\n\n",p);
}

int main(){
	
	int e = 9;
	int* p = &e; //此处p为实参
	printf("main:p中的地址为: %d\n\n",p);
	
	A(p);
	
	printf("main:p中的地址为: %d\n\n",p);
	return 0;
} 

   

其中的原理实际上涉及到形参和实参这两个概念:

实参出现在主调函数中, 形参出现在函数定义中。

形参在整个函数体内都可以使用, 当改变形参的值的时候,并不会改变实参的值。

就像一个普通的变量,当将其传递到函数当中处理的时候,主函数中变量的值不会改变一样,指针变量说白了也是变量,同样遵循这个规则。

之所以掉进这个坑里,还是将指针变量与指针混淆的原因,在函数中直接改变指针变量中地址所指向的内容,会改变函数外面指针所指向变量的值。但是在函数中改变指针变量的值,不会改变函数外面指针变量的值。

  • 38
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值