想问个结构里的数组问题
struct Person
{
char name;
unsigned long id;
float salary;
};
Person pr1 = {"fuck",1234567,3.35f};
int main()
{
Person pr2 ;
pr2 = pr1;
cout <<pr2.name << endl;
}
像这个程序, 首先数组与数组不能直接赋值, 那结构里面的数组成员,它们是如何达到赋值的效果的呢?是赋值还是指向相同的地址呢?但 &pr1.name 与 &pr2.name 是不同的....
这应该怎么理解呢? 三年没有来这个论坛了,以为已经早就不存在了,今天清理收藏夹点到了这里,又在这个论坛看到了熟悉的名字 ,莫名的亲切感油然而生。
咳咳~ 楼主提的问题还是很有意思的。首先,整个程序都没有涉及指针,所以也就不存在指向相同地址的问题。正如楼主所说,&pr1.name 与&pr2.name 是不同的。Person在实例化(这个词可能不恰当)为pr1,pr2 时,分别为它们的name成员开辟了20个单元内存空间。因此,做pr2=pr1时,程序将包含pr1.name地址在内之后的20个连续地址单元内的值原封不动地复制到了pr2.name地址在内之后的20个连续地址单元中。
我理解的就是这样,哈哈~ 小的觉着这个是调用了C++98规范里有的默认赋值操作符。C++里的struct与class里都有默认的无参构造函数、拷贝构造函数和赋值操作符。
pr2的声明处调用了空参数的默认构造函数,pr2 = pr1调用了默认的赋值操作符(operator =),行为是按位复制。 和c++的class没有重载operator=的情况一样,默认进行位拷贝操作
页:
[1]