关于C与C++中函数的变量传递方式的总结归纳
其大致可以分为传递参数,传递地址,传递数组,传递引用类型
首先我们根据传递的方式可以分为两大类,传入数值和传入地址两种;
1 传递数值
在函数的使用中,我们传递参数,一般常见的这种类型,其传入过程中,仅仅传入数值,对原实参无影响;
//传入形参
void swap(float m,float n)
{
float temp;
temp=m;
m=n;
n=temp;
}
2. 传递地址即操作指针变量(C语言的指针操作)
我们知道操作指针意味着对原存储单元地址进行操作,因此在传入指针变量的函数的处理中,会导致原来实参发生变化,例如下面的方式:
//传入地址,对地址上的内容进行交换
void swap1(int32_t *m,int32_t *n)
{
int32_t temp;
temp=*m; //取出地址m的内容
*m=*n; //将另一个地址的内容传递给地址m的位置
*n=temp; //完成交换
}
//传入地址,对地址进行交换
void swap2(int32_t *m,int32_t *n)
{
int32_t *temp;
temp=m;
m=n;
n=temp;
}
以上的两种方式均是传入指针操作地址。第一个对地址的内容进行交换第二个交换两个地址。
3.传递数组
在函数参数的传入中,我们还经常可以看到类似一传入数组的操作,其本质是传入了数组的首位地址,因此在内部对数组操作也会导致原来的实参发生改变;
//传入数组
void sub(char b[])
{
b[1]='a';
}
4. 传递引用类型是C++ 中的一种参数传入的方式
传递引用类型:本质为指针的引用,也是c++对C语言的一个重要的扩冲,引用变量实际上就是操作原变量)
操作实例:
//传入引用类型作为参数
void swap3(int32_t &m,int32_t &n)
{
int32_t temp;
temp=m;
m=n;
n=temp;
}
全部代码
#include<iostream>
#include<string>
//传入形参
void swap(float m,float n)
{
float temp;
temp=m;
m=n;
n=temp;
}
//传入地址,对地址上的内容进行交换
void swap1(int32_t *m,int32_t *n)
{
int32_t temp;
temp=*m; //取出地址m的内容
*m=*n; //将另一个地址的内容传递给地址m的位置
*n=temp; //完成交换
}
//传入地址,对地址进行交换
void swap2(int32_t *m,int32_t *n)
{
int32_t *temp;
temp=m;
m=n;
n=temp;
}
//传入数组
void sub(char b[])
{
b[1]='a';
}
//传入引用类型作为参数
void swap3(int32_t &m,int32_t &n)
{
int32_t temp;
temp=m;
m=n;
n=temp;
}
int main(int argc, char const *argv[])
{ char name[10]="hello";
std::cout << "Please enter 变量";
std::int32_t a,b;
std::cin >> a>>b;
swap(a,b); //交换形参 实参不变
std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
int32_t *p1,*p2;
p1=&a;
p2=&b;
swap1(p1,p2); //交换地址的内容
std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
swap2(p1,p2); //交换地址
std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
sub(name);
std::cout << "Hello,look name: " <<name<<std::endl;
int32_t aa=1;
int32_t bb=2;
swap3(aa,bb); //C++引用交换位置
std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
return 0;
}
操作结果: