王道-C语言督学营-6.2 指针的传递使用场景

#include<stdio.h>
void change(int j)    //j是形参,而 底下的i是实参
{
    j=5;
}
int main()
{
    int i=10;
    printf("before change i=%d \n",i);
    change(i);   //C语言的“函数调用”是 “值传递”,“实参”赋值给“形参”
    printf("after change i=%d \n",i);     
    return 0;
}

结果:

注意:

通过    change(i);  

其实 已经将 实参传递给形参j,同时改变了j的值,将j的值变为10

然后运行   j=5;

只是把 change子函数中的j变成5,而主函数的i并未发生改变


#include<stdio.h>
void change(int *j)    //等价 j = &i
{
    *j=5;    //可以通过“间接访问”得到变量i的空间
}
int main()
{
    int i=10;
    printf("before change i=%d \n",i);
    change(&i);   //传递变量i的地址
    printf("after change i=%d \n",i);     
    return 0;
}

结果为:

这是为什么呢?

        ① 当运行 change(&i);   是将 i的地址传递给 *j ;

        ②由于 运行*j=5; 是通过 间接访问  访问i的地址,然后在改变i的值,所以 会将主函数中的i值改变。 


指针和普通函数的区别

        从上述例子可以看出,普通函数的子函数无法突破传统的“值传递”(实参”赋值给形参),而通过“指针”可以实现,因为指针的特点“间接访问”,通过获取该变量的地址,再对其进行值的改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值