浅析c/c++中函数的参数传递
C++ 函数 浅析 参数传递
2023-06-13 09:15:03 时间
下面来看一段代码,看看三种传递方式产生的结果。
#include<cstdlib>
#include<iostream>
usingnamespacestd;
voidchange1(intn)
{
cout<<"值传递--函数操作地址"<<&n<<endl;
n++;
}
voidchange2(int&n)
{
cout<<"引用传递--函数操作地址:"<<&n<<endl;
n++;
}
voidchange3(int*n)
{
cout<<"指针传递--函数操作地址"<<n<<endl;
*n=*n+1;
}
intmain(intargc)
{
intn=10;
cout<<"实参地址:"<<&n<<endl;
cout<<"原值n="<<n<<endl;
change1(n);
cout<<"afterchange1n="<<n<<endl;
change2(n);
cout<<"afterchange2n="<<n<<endl;
change3(&n);
cout<<"afterchange3n="<<n<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}
打印结果如下:
可见,原值为10的实参n,change1函数没有改变它的值,而change2、change3函数则成功改变了它的值。
同时,查看函数的操作地址,也会发现,change1的操作地址并不是实参n的地址。
说明:
1.值传递的形式不会传递n本身,故不能改变n的值。
2.引用传递、指针传递,实际上就是将地址传入,能够成功对该地址进行操作。
但是需要注意:
1.引用和指针传递前,需要被初始化。
2.引用和指针在内存中开辟的储存单元应该是合法单元,不应该是NULL。
3.一旦引用被初始化,就不能改变引用的关系,而指针可以随意改变指向的对象。
对于没有初始化指针或者引用的情况,我们再来看一个例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
usingnamespacestd;
voidinit(char*p)
{
p=(char*)malloc(100);
cout<<"指针传递--函数操作地址"<<p<<endl;
}
intmain()
{
char*p=NULL;
cout<<"实参原地址"<<p <<endl;
init(p);
if(p)
{
strcpy(p,"hello");
printf("%s\n",p);
}
else
{
printf("%s","pnotinit\n");
}
free(p);
system("PAUSE");
returnEXIT_SUCCESS;
}
输出结果:
相关文章
- EasyC++36,函数的默认参数
- c++解决大整数乘法
- c++ findwindow函数_matlab中怎么查找函数的用法
- C++find函数用法_MATLAB中find的用法
- C++字符串加密_c++字符串连接函数
- C/C++ 获取 MAC 地址的几种方法
- 华为OD机试真题 C++ 实现【积木最远距离】2022.11 Q4
- C++模板初阶
- C++面试必备:常见C++面试题汇总及详细解析
- C++箴言:避免构造或析构函数中调用虚函数详解编程语言
- C++ lognormal_distribution对数分布随机数函数用法详解
- C++移动构造函数和移动赋值运算符详解
- C++聚合和组合详解
- C++ map(STL map)构造元素(emplace和emplace_hint函数)详解
- C++函数引用传递(超详细)
- C++常量成员函数
- C++ seekp和seekg函数用法详解
- 浅析C和C++函数的相互引用
- 深入理解c/c++内存对齐
- c++静态局部变量和静态函数示例
- C++中可正确获取UTF-8字符长度的函数分享