您的位置:首页 > 其它

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

2016-07-02 21:35 483 查看
#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就是说实参所指向的变量的值是只读的,形参不能改变;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: