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}初始化