找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3280|回复: 3

[通用编程] 想问个结构里的数组问题

[复制链接]
发表于 2008-5-31 11:47:40 | 显示全部楼层 |阅读模式
  1. struct Person
  2. {
  3.     char name[20];
  4.     unsigned long id;
  5.     float salary;
  6. };
  7. Person pr1 = {"fuck",1234567,3.35f};
  8. int main()
  9. {
  10.                     Person   pr2 ;
  11.                     pr2   =   pr1;
  12.                     cout <<  pr2.name << endl;
  13. }
复制代码
像这个程序, 首先数组与数组不能直接赋值, 那结构里面的数组成员,它们是如何达到赋值的效果的呢?是赋值还是指向相同的地址呢?但 &pr1.name   与 &pr2.name 是不同的....
这应该怎么理解呢?
发表于 2008-6-1 19:57:05 | 显示全部楼层
三年没有来这个论坛了,以为已经早就不存在了,今天清理收藏夹点到了这里,又在这个论坛看到了熟悉的名字 ,莫名的亲切感油然而生。
咳咳~ 楼主提的问题还是很有意思的。首先,整个程序都没有涉及指针,所以也就不存在指向相同地址的问题。正如楼主所说,&pr1.name 与&pr2.name 是不同的。Person在实例化(这个词可能不恰当)为pr1,pr2 时,分别为它们的name成员开辟了20个单元内存空间。因此,做pr2  =  pr1时,程序将包含pr1.name地址在内之后的20个连续地址单元内的值原封不动地复制到了pr2.name地址在内之后的20个连续地址单元中。
我理解的就是这样,哈哈~
发表于 2008-6-3 04:32:12 | 显示全部楼层
小的觉着这个是调用了C++98规范里有的默认赋值操作符。C++里的struct与class里都有默认的无参构造函数、拷贝构造函数和赋值操作符。
pr2的声明处调用了空参数的默认构造函数,pr2 = pr1调用了默认的赋值操作符(operator =),行为是按位复制。
发表于 2008-6-4 21:29:09 | 显示全部楼层
和c++的class没有重载operator=的情况一样,默认进行位拷贝操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-10-31 11:26 , Processed in 0.012264 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表