C语言中,实参与形参传递方式有哪些常见问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1976个文字,预计阅读时间需要8分钟。
函数中参数的传递
这里说的传递当然是指 实参是如何传递给形参的啦
还挺复杂的~~~~~~~~⊙﹏⊙b汗,这里讲述了4种参数传递的情况和注意事项:
1.非引用形参
这是最普通,也是最简单的形参传递了。
参数传递,即是使用实参副本(注意啊,是副本,不是实参本身)来初始化形参;
因此,在函数体内对形参的修改不会影响实参的值。
如果形参是指针类型的,那么函数体内是否可以修改指针所指向的对象的值呢?
如果您产生这样的疑问,表示您很有想法~~~
答案是~~~需要分情况讨论。
如果函数的形参是非const类型的指针,则函数可以通过指针实现赋值,修改指针所指向对象的值。
所以,如果需要保护指针指向的值,则形参需定义为指向const对象的指针(注意了,这里的指针依然是非const型的,只是其指向的对象是const型的):
void use_ptr(const int *p) { //use_ptr这个函数可以读指针p所指向的对象,但是不可以修改该对象的值 }
const形参
如果函数使用的是非引用非const形参,则既可以给该它传递const实参,也可传递非const实参。
如果函数使用的是非引用const形参,也是既可以给该它传递const实参,也可传递非const实参。那么这两者的差别是什么呢?对于后者,函数连实参的局部副本都不可以改变了。
本文共计1976个文字,预计阅读时间需要8分钟。
函数中参数的传递
这里说的传递当然是指 实参是如何传递给形参的啦
还挺复杂的~~~~~~~~⊙﹏⊙b汗,这里讲述了4种参数传递的情况和注意事项:
1.非引用形参
这是最普通,也是最简单的形参传递了。
参数传递,即是使用实参副本(注意啊,是副本,不是实参本身)来初始化形参;
因此,在函数体内对形参的修改不会影响实参的值。
如果形参是指针类型的,那么函数体内是否可以修改指针所指向的对象的值呢?
如果您产生这样的疑问,表示您很有想法~~~
答案是~~~需要分情况讨论。
如果函数的形参是非const类型的指针,则函数可以通过指针实现赋值,修改指针所指向对象的值。
所以,如果需要保护指针指向的值,则形参需定义为指向const对象的指针(注意了,这里的指针依然是非const型的,只是其指向的对象是const型的):
void use_ptr(const int *p) { //use_ptr这个函数可以读指针p所指向的对象,但是不可以修改该对象的值 }
const形参
如果函数使用的是非引用非const形参,则既可以给该它传递const实参,也可传递非const实参。
如果函数使用的是非引用const形参,也是既可以给该它传递const实参,也可传递非const实参。那么这两者的差别是什么呢?对于后者,函数连实参的局部副本都不可以改变了。

