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

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

#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可以直接输出结构体名,得到的是第一个元素的地址。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值