Jer*_*fin 11
在C中,没有通过引用的调用.你可以得到的最接近的地方是获取一个地址,并传递该地址的副本(按价值 - 见下文).
在C++中,通过引用调用传递对象的引用(原始对象的别名).通常,这将作为对象的地址实现,但不能保证.
按值调用意味着获取某种值,并将该值的副本传递给该函数.
基本区别在于,当您按值传递参数时,该函数仅接收原始对象的副本,因此它无法执行任何操作来影响原始对象.通过引用传递,它获取对原始对象的引用,因此它可以访问原始对象,而不是它的副本 - 除非它是const引用,它可以修改原始对象(例如).
传递给函数的参数可以有两种类型,即\n 1. 传递的值\n 2. 传递的地址
\n\n第一种类型是指按值调用,第二种类型是指按引用调用。\n例如,考虑program1
\n\n main()\n {\n int x=50, y=70;\n interchange(x,y);\n printf(\xe2\x80\x9cx=%d y=%d\xe2\x80\x9d,x,y);\n }\n\n interchange(x1,y1)\n int x1,y1;\n {\n int z1;\n z1=x1;\n x1=y1;\n y1=z1;\n printf(\xe2\x80\x9cx1=%d y1=%d\xe2\x80\x9d,x1,y1);\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这里函数交换的值是按值传递的。
\n\n考虑方案2
\n\nmain()\n{\n int x=50, y=70;\n interchange(&x,&y);\n printf(\xe2\x80\x9cx=%d y=%d\xe2\x80\x9d,x,y);\n}\n\ninterchange(x1,y1)\nint *x1,*y1;\n{\n int z1;\n z1=*x1;\n *x1=*y1;\n *y1=z1;\n printf(\xe2\x80\x9c*x=%d *y=%d\xe2\x80\x9d,x1,y1);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这里通过引用调用该函数。换句话说,地址是通过使用符号&来传递的,而值是通过使用符号*来访问的。
\n\n通过分析program1和program2的输出可以看出它们之间的主要区别。
\n\n按值调用的program1的输出是
\n\nx1=70 y1=50\nx=50 y=70\nRun Code Online (Sandbox Code Playgroud)\n\n但是通过引用调用的program2的输出是
\n\n*x=70 *y=50\nx=70 y=50\nRun Code Online (Sandbox Code Playgroud)\n\n这是因为在按值调用的情况下,该值被传递给名为交换的函数,并且该值被交换并打印为
\n\nx1=70 y1=50\nRun Code Online (Sandbox Code Playgroud)\n\n再次由于没有返回任何值,因此 x 和 y 的原始值与 main 函数中一样
\n\nx=50 y=70 got printed.\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
61014 次 |
| 最近记录: |