源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅析c/c++中函数的参数传递

  • 时间:2021-06-03 16:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅析c/c++中函数的参数传递
下面来看一段代码,看看三种传递方式产生的结果。
[u]复制代码[/u] 代码如下:
#include <cstdlib> #include <iostream> using namespace std; void change1(int n) {      cout << "值传递--函数操作地址" << &n << endl;      n ++; } void change2(int &n) {      cout << "引用传递--函数操作地址:" << &n << endl;      n ++; } void change3(int *n) {      cout << "指针传递--函数操作地址" << n << endl;      *n = *n + 1; } int main(int argc) {     int n = 10;     cout << "实参地址:" << &n << endl;     cout << "原值 n =" << n << endl;     change1(n);     cout << "afterchange1 n =" << n << endl;     change2(n);     cout << "afterchange2 n =" << n << endl;     change3(&n);     cout << "afterchange3 n =" << n << endl;     system("PAUSE");     return EXIT_SUCCESS; }
打印结果如下: [img]http://files.jb51.net/file_images/article/201307/20130724100955.png[/img] 可见,原值为10的实参n,change1函数没有改变它的值,而change2、change3函数则成功改变了它的值。 同时,查看函数的操作地址,也会发现,change1的操作地址并不是实参n的地址。 [b]说明: [/b]1.值传递的形式不会传递n本身,故不能改变n的值。 2.引用传递、指针传递,实际上就是将地址传入,能够成功对该地址进行操作。 [b]但是需要注意: [/b]1.引用和指针传递前,需要被初始化。 2.引用和指针在内存中开辟的储存单元应该是合法单元,不应该是NULL。 3.一旦引用被初始化,就不能改变引用的关系,而指针可以随意改变指向的对象。 对于没有初始化指针或者引用的情况,我们再来看一个例子:
[u]复制代码[/u] 代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> using namespace std; void init(char *p) {     p = (char *)malloc(100);     cout << "指针传递--函数操作地址" << p << endl; } int main() {     char *p = NULL;     cout << "实参原地址" << p  << endl;     init(p);        if(p)     {         strcpy(p, "hello");         printf("%s \n", p);     }     else     {         printf("%s", "p not init \n");     }     free(p);     system("PAUSE");     return EXIT_SUCCESS; }
输出结果: [img]http://files.jb51.net/file_images/article/201307/20130724101017.png[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部