入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2016-07-02 投稿人: 浏览次数:2232
#include<stdio.h>
void change(int *p){     int val = 5;     printf("%p ", p);     *p = val;     printf("%p ", p);     p = &val;     printf("%p ", p); }
int main(){     int val = 4;     int *p = &val;     change(p);     printf("%d ", *p);     printf("%p ", 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 ", p);     /**p = val;     printf("%p ", p);*/  //去掉注释将发生read-only错误     p = &val;     printf("%p ", p); }
运行结果: 0x7fff85402a94 0x7fff85402a7c 4 0x7fff85402a94
可以看出加上const之后,不能改变形参所指向的变量的值,但是可以改变形参的指向; 其实加上const就是说实参所指向的变量的值是只读的,形参不能改变;
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。