内置类型和结构体类型作为函数参数传递时的共同点
2013-03-18 20:12
225 查看
结构体类型不同于数组,而结构体类型与内置类型有很多相同之处。数组名代表数组的第一个元素的地址,而结构体名代表的却不是地址而是第一个元素的值。在作为函数参数时,和内置类型一样,可以通过值(结构体名)、引用、指针几种方式传递。而且其传递特点与内置类型一致,例子:
注意:以结构体名作为参数传递时,同内置类型一样不能对实参做修改。而通过引用和指针则可以修改实参。一定要注意实参与形参的对应关系:
结构体类型与内置类型的比较
另外,C++不支持直接输出结构体名,而用C可以直接输出结构体名,得到的是第一个元素的地址。
#include <iostream> using namespace std; typedef struct Change { int m; int n; }StrChange; void Change(int a1); void YChange(int &b1); void PChange(int *c1); void Change1(StrChange ChangeL1 ); void YChange1(StrChange &ChangeM1); void PChange1(StrChange *ChangeN1); void main() { int a = 1; int b = 2; int c = 3; StrChange ChangeL; StrChange ChangeM; StrChange ChangeN; ChangeL.m = 4; ChangeL.n = 5; ChangeM.m =6; ChangeM.n = 7; ChangeN.m = 8; ChangeN.n = 9; Change(a); //传值,无法改变 YChange(b); //引用,可以改变 PChange(&c); //指针(地址),可以改变 Change1(ChangeL); //值,无法改变。和基本类型一样,不能通过传值改变,这里不同于数组! YChange1(ChangeM); //引用,可以改变 PChange1(&ChangeN); //指针(地址),可以改变 cout<<"The a is : "<<a<<endl; cout<<"The b is : "<<b<<endl; cout<<"The c is : "<<c<<endl; cout<<"The m in struct L is : "<<ChangeL.m<<endl; cout<<"The n in struct L is : "<<ChangeL.n<<endl; cout<<"The m in struct M is : "<<ChangeM.m<<endl; cout<<"The n in struct M is : "<<ChangeM.n<<endl; cout<<"The m in struct N is : "<<ChangeN.m<<endl; cout<<"The n in struct N is : "<<ChangeN.n<<endl; } void Change(int a1) { a1 = 11; } void YChange(int &b1) { b1 = 22; } void PChange(int *c1) { *c1 = 33; } void Change1(StrChange ChangeL1 ) { ChangeL1.m = 44; ChangeL1.n = 55; } void YChange1(StrChange &ChangeM1) { ChangeM1.m = 66; ChangeM1.n =77; } void PChange1(StrChange *ChangeN1) { ChangeN1->m = 88; (*ChangeN1).n = 99; }
注意:以结构体名作为参数传递时,同内置类型一样不能对实参做修改。而通过引用和指针则可以修改实参。一定要注意实参与形参的对应关系:
实参 | 形参 | |
内置类型(传值) | a | b |
内置类型(引用) | a | &b |
内置类型(指针) | &a | *b |
结构体类型(传值) | a(数组名) | a(数组名) |
结构体类型(引用) | a | &b |
结构体类型(指针) | &a | *b |
相关文章推荐
- 内置类型和结构体类型作为函数参数传递时的共同点
- string类型在参数传递中如何作为引用,如何在函数外修改函数内的string类型
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- 如何将二维数组作为函数的参数传递
- 结构体类型数据作为函数参数(三种方法)
- 二维数组作为函数参数传递剖析
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- 【旧资料整理】C\C++ 将函数名作为函数参数传递
- 函数作为参数的传递
- go语言函数作为参数传递
- 项目二.2(指针类型作为成员函数的参数)
- 6-2-b 指针类型作为成员函数的参数
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 面试之路(18)-java的函数参数传递类型之值传递还是引用传递
- 数组作为函数参数传递时
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- js 函数传递参数类型问题(基本类型和引用类型)
- C语言技巧【枚举作为函数变量类型】【数据输入与输出】【do while循环体内scanf函数被跳过,循环结束】【用const修饰函数的参数】
- JS中把函数作为另一函数的参数传递总结
- C#中数组作为函数参数的传递方式