函数调用参数为指针时,实参跟形参的问题

本文通过代码示例探讨了在C语言中,当函数调用参数为指针时,实参和形参之间的关系。实验证明,形参对指针变量值的修改不会影响实参,但对指针所指向的变量的值的修改会反映到实参。当形参为`const int *`时,禁止修改所指向的变量值,但仍然可以改变指针本身的指向。
#include<stdio.h>

void change(int *p){
    int val = 5;
    printf("%p\n", p);
    *p = val;
    printf("%p\n", p);
    p = &val;
    printf("%p\n", p);
}

int main(){
    int val = 4;
    int *p = &val;
    change(p);
    printf("%d\n", *p);
    printf("%p\n", p);
    return 0;
}

运行结果:
0x7fffdb8192a4
0x7fffdb8192a4
0x7fffdb81928c
5
0x7fffdb8192a4

可以看出,实参跟形参是两个不同的指针,只不过进入函数时,实参跟形参都指向main函数中的val地址,
当改变形参指向的变量的值时,*p = val; main函数中的val被改变;
但是改变形参的指向地址时,p = &val; 只是改变了形参的指向,并没有改变实参的指向;

当加上const之后:
void change(const int *p){
    int val = 5;
    printf("%p\n", p);
    /**p = val;
    printf("%p\n", p);*/  //去掉注释将发生read-only错误
    p = &val;
    printf("%p\n", p);
}

运行结果:
0x7fff85402a94
0x7fff85402a7c
4
0x7fff85402a94

可以看出加上const之后,不能改变形参所指向的变量的值,但是可以改变形参的指向;
其实加上const就是说实参所指向的变量的值是只读的,形参不能改变;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值