您的位置:首页 > 其它

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

2014-08-15 13:06 218 查看

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


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

分类: C2013-03-18
20:12 275人阅读 评论(0) 收藏 举报

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

[cpp] view
plaincopy

#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;

}



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

结构体类型与内置类型的比较

实参形参
内置类型(传值)ab
内置类型(引用)a&b
内置类型(指针)&a*b
结构体类型(传值)a(数组名)
a(数组名)
结构体类型(引用)a&b
结构体类型(指针)&a*b
另外,C++不支持直接输出结构体名,而用C可以直接输出结构体名,得到的是第一个元素的地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: