【判断题】指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传递的特点是,被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值(形参指针变了,实参指针不会变)。 引用参数传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量(根据别名找到主调函数中的本体)。因此,被调函数对形参的任何操作都会影响主调函数中的实参变量。 引用传递和指针传递是不同的,虽然他们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将应用不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量(地址),那就得使用指向指针的指针或者指针引用。 从编译的角度来
举一反三
- 字符指针变量作为函数的形参和实参可以实现将一个字符串的首地址从主调函数传递到另一被调函数中。
- 下列关于值传递的叙述,错误的是( )。 A: 值传递只是将主调函数中实参的值传递给被调函数的形参 B: 值传递时,实参可以是常量、变量或表达式 C: 值传递是一种单向数据传递机制 D: 被调函数对形参的修改将会影响到主调函数中的实参
- 要通过函数调用来改变主调函数中某个变量的值,可以把指针作为函数的参数。
- 在C语言中,函数调用时如果相应的形参和实参都是简单变量,则主调函数和被调函数之间传递数据的方式是()。 A: 单向地址值传递 B: 双向地址值传递 C: 单向数值传递 D: 双向数值传递
- 下列关于引用传递的叙述,错误的是( )。 A: 引用传递将被调函数的形参定义成主调函数中实参变量的引用 B: 引用传递时,实参可以是常量、变量或表达式 C: 引用传递是一种双向数据传递机制 D: 引用传递时,被调函数修改形参实际上修改的是所引用的实参