结构体中的AnsiString是传值还传址

AnsiString是C++Builder中的字符串类.当结构体中有AnsiString成员时,而结构体又赋值给另一个结构体。交换的是值还是地址呢?

struct  data
{
    int id;
    AnsiString name;
};
data d;//全局变量
void __fastcall TForm1::Button8Click(TObject *Sender)
{
     data  c;//局部变量
     c.id   = 1200;
     c.name = "hello";
     d = c;//给全局变量赋值
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button9Click(TObject *Sender)
{
   ShowMessage(d.name);//显示的是hello
}

结果显示在交换两个结构体时,传递的是值。AnsiString内部也是指针,只不过进行写时复制。所以AnsiString可以和普通值一样用。那么成员AnsiString和普通类型,如int,char *到底有何差异呢?

(1)结构体长度

当结构体中有AnsiString时,在用sizeof(d)时得到的是8,说明AnsiString是按地址长度4计算的。

(2)初始化问题

当结构体中有AnsiString时,不能用如下初始化方法:

Data  e = {"hello",20};//如果结构体中都是普通成员,是可以用大括号分别对成员进行初始化的

但能用Data * e = {"hello",20}初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值