c语言指针的传引用

c语言指针的传引用

欢迎关注AWP资讯
当我们想要实现一个如下功能的程序:

在main函数中调用另一个递增函数,实现变量的递增,我们在初学时或小白状态时,可能会写出如下代码:

#include <stdio.h>

void add(int a)
{
	a = a+1;
}

void main(void)
{
	int a = 10;
	
	add(a);
	printf("a = %d\n",a);
}

在我们理解的C语言或程序的运行后我们知道,a的值不会随着add函数递增变为11,最终打印出的值为10,我们运行看一下结果

在这里插入图片描述

打印出来的结果是10,并不是我们期望的11。这里留给我们思考的就是这里传的值跑哪去了,要想理解其中的奥妙,首先要明白虽然在main函数中的变量a和add函数中的a同名,但是这两个变量的地址是不同的,这里函数运行时只将值传进去了,而没有改变main函数中变量a的值,这两个变量是不同的变量,分别位于不同的地址空间,所以打印出来的是10。再执行下面一段函数,分别看一下地址和值为多少

#include <stdio.h>

void add(int a)
{
        a = a + 1;
        printf("add:address a = %d,vaule a = %d\n",&a,a);
}

int main()
{
        int a = 10;
        
        add(a);

        printf("main:address a = %d,vaule a = %d\n",&a,a);
        return 0;
}

在这里插入图片描述

从打印结果来看add中的地址和main中的地址是不同的,程序运行时只进行了传值,改变的是不同地址空间上的值,对于main中的变量值仍然没有改变,可以用如下图来表示

在这里插入图片描述

两个变量分别在不同的地址上,add函数中的值执行了a+1,a的值变为了11,而main函数中的a没有执行运算,所以还是保持原来的值。那么我们如何才能实现不用返回值调用add函数的功能,这里就可以用指针的传引用来实现,通过指针来传址,代码如下

#include <stdio.h>

void add(int *p)
{
        *p =(*p) + 1;//变量地址上的值加1
        printf("add:address p = %d,vaule *p = %d\n",p,*p);
}

int main()
{
        int a = 10;

        add(&a);

        printf("main:address a = %d,vaule a = %d\n",&a,a);
        return 0;
}

打印结果如下

在这里插入图片描述

将变量a的地址传入add函数,add函数对传入的地址上的值进行运算操作,使得这一地址上的值改变,最终可以得到我们想要的+1结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值