内置类型和结构体类型作为函数参数传递时的共同点

来源:互联网 发布:centos jdk 编辑:程序博客网 时间:2024/06/10 07:27

http://blog.csdn.net/s3olo/article/details/8688725

内置类型和结构体类型作为函数参数传递时的共同点

分类: C 275人阅读 评论(0) 收藏 举报

结构体类型不同于数组,而结构体类型与内置类型有很多相同之处。数组名代表数组的第一个元素的地址,而结构体名代表的却不是地址而是第一个元素的值。在作为函数参数时,和内置类型一样,可以通过值(结构体名)、引用、指针几种方式传递。而且其传递特点与内置类型一致,例子:

[cpp] view plaincopy
  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. typedef struct Change  
  6. {  
  7.     int m;  
  8.     int n;  
  9. }StrChange;  
  10.   
  11. void Change(int a1);  
  12. void YChange(int &b1);  
  13. void PChange(int *c1);  
  14.   
  15. void Change1(StrChange ChangeL1 );  
  16. void YChange1(StrChange &ChangeM1);  
  17. void PChange1(StrChange *ChangeN1);  
  18.   
  19. void main()  
  20. {  
  21.     int a = 1;  
  22.     int b = 2;  
  23.     int c = 3;  
  24.   
  25.    StrChange ChangeL;  
  26.    StrChange ChangeM;  
  27.    StrChange ChangeN;  
  28.   
  29.     ChangeL.m = 4;  
  30.     ChangeL.n = 5;  
  31.   
  32.     ChangeM.m =6;  
  33.     ChangeM.n = 7;  
  34.   
  35.     ChangeN.m = 8;  
  36.     ChangeN.n = 9;  
  37.   
  38.     Change(a);     //传值,无法改变  
  39.     YChange(b);     //引用,可以改变  
  40.     PChange(&c);    //指针(地址),可以改变  
  41.   
  42.     Change1(ChangeL);   //值,无法改变。和基本类型一样,不能通过传值改变,这里不同于数组!  
  43.     YChange1(ChangeM);  //引用,可以改变  
  44.     PChange1(&ChangeN); //指针(地址),可以改变  
  45.   
  46.     cout<<"The a is :  "<<a<<endl;  
  47.     cout<<"The b is :  "<<b<<endl;  
  48.     cout<<"The c is :  "<<c<<endl;  
  49.   
  50.     cout<<"The m in struct L is :  "<<ChangeL.m<<endl;  
  51.     cout<<"The n in struct L is :  "<<ChangeL.n<<endl;  
  52.   
  53.     cout<<"The m in struct M is :  "<<ChangeM.m<<endl;  
  54.     cout<<"The n in struct M is :  "<<ChangeM.n<<endl;  
  55.   
  56.     cout<<"The m in struct N is :  "<<ChangeN.m<<endl;  
  57.     cout<<"The n in struct N is :  "<<ChangeN.n<<endl;  
  58. }  
  59.   
  60. void Change(int a1)  
  61. {  
  62.     a1 = 11;  
  63. }  
  64.   
  65. void YChange(int &b1)  
  66. {  
  67.     b1 = 22;  
  68. }  
  69.   
  70. void PChange(int *c1)  
  71. {  
  72.     *c1 = 33;  
  73. }  
  74.   
  75. void Change1(StrChange ChangeL1 )  
  76. {  
  77.     ChangeL1.m = 44;  
  78.     ChangeL1.n = 55;  
  79. }  
  80.   
  81. void YChange1(StrChange &ChangeM1)  
  82. {  
  83.     ChangeM1.m = 66;  
  84.     ChangeM1.n =77;  
  85. }  
  86.   
  87. void PChange1(StrChange *ChangeN1)  
  88. {  
  89.     ChangeN1->m = 88;  
  90.     (*ChangeN1).n = 99;  
  91. }  
 

注意:以结构体名作为参数传递时,同内置类型一样不能对实参做修改。而通过引用和指针则可以修改实参。一定要注意实参与形参的对应关系:

结构体类型与内置类型的比较 实参形参内置类型(传值)ab内置类型(引用)a&b内置类型(指针)&a*b结构体类型(传值)

a(数组名)

a(数组名)结构体类型(引用)a&b结构体类型(指针)&a*b

另外,C++不支持直接输出结构体名,而用C可以直接输出结构体名,得到的是第一个元素的地址。
0 0
原创粉丝点击