幻想森林

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

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

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 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 是不同的....
这应该怎么理解呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

0

主题

1

帖子

13

积分

②入门

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

使用道具 举报

0

主题

25

帖子

254

积分

③业余

积分
254
发表于 2008-6-3 04:32:12 | 显示全部楼层
小的觉着这个是调用了C++98规范里有的默认赋值操作符。C++里的struct与class里都有默认的无参构造函数、拷贝构造函数和赋值操作符。
pr2的声明处调用了空参数的默认构造函数,pr2 = pr1调用了默认的赋值操作符(operator =),行为是按位复制。
回复 支持 反对

使用道具 举报

1

主题

19

帖子

656

积分

⑤进阶

大猫

积分
656
QQ
发表于 2008-6-4 21:29:09 | 显示全部楼层
和c++的class没有重载operator=的情况一样,默认进行位拷贝操作
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-25 06:50 , Processed in 0.021766 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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