august 发表于 2008-5-31 11:47:40

想问个结构里的数组问题


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 是不同的....
这应该怎么理解呢?

小gu 发表于 2008-6-1 19:57:05

三年没有来这个论坛了,以为已经早就不存在了,今天清理收藏夹点到了这里,又在这个论坛看到了熟悉的名字 ,莫名的亲切感油然而生。
咳咳~ 楼主提的问题还是很有意思的。首先,整个程序都没有涉及指针,所以也就不存在指向相同地址的问题。正如楼主所说,&pr1.name 与&pr2.name 是不同的。Person在实例化(这个词可能不恰当)为pr1,pr2 时,分别为它们的name成员开辟了20个单元内存空间。因此,做pr2=pr1时,程序将包含pr1.name地址在内之后的20个连续地址单元内的值原封不动地复制到了pr2.name地址在内之后的20个连续地址单元中。
我理解的就是这样,哈哈~

ravenex 发表于 2008-6-3 04:32:12

小的觉着这个是调用了C++98规范里有的默认赋值操作符。C++里的struct与class里都有默认的无参构造函数、拷贝构造函数和赋值操作符。
pr2的声明处调用了空参数的默认构造函数,pr2 = pr1调用了默认的赋值操作符(operator =),行为是按位复制。

诸神的曙光 发表于 2008-6-4 21:29:09

和c++的class没有重载operator=的情况一样,默认进行位拷贝操作
页: [1]
查看完整版本: 想问个结构里的数组问题