免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4869 | 回复: 4
打印 上一主题 下一主题

[C] 结构体为何不能这样赋值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-23 14:01 |只看该作者 |倒序浏览
//define
typedef struct{
        int  mInputputIndex;
        int  mOutputIndex;
}usift_IOModeInfo;

//初始化
usift_IOModeInfo  IOModeInfoBuffer[4]={0};

//赋值
IOModeInfoBuffer[0]={1,1}//-----<<<<为何不能这样复制?

小弟经常发生这样的错误,至今不明白为何不能这样做,还有(实际行这个结构体中还有一个枚举变量),
不知什么书哪里有这些方面的知识,谢谢

论坛徽章:
0
2 [报告]
发表于 2008-04-23 14:17 |只看该作者
原帖由 jiony 于 2008-4-23 14:01 发表
//define
typedef struct{
        int  mInputputIndex;
        int  mOutputIndex;
}usift_IOModeInfo;

//初始化
usift_IOModeInfo  IOModeInfoBuffer[4]={0};

//赋值
IOModeInfoBuffer[0]={1,1}//-----


因为这种形式只能初始化

论坛徽章:
0
3 [报告]
发表于 2008-04-24 20:57 |只看该作者
原帖由 jiony 于 2008-4-23 14:01 发表
//define
typedef struct{
        int  mInputputIndex;
        int  mOutputIndex;
}usift_IOModeInfo;

//初始化
usift_IOModeInfo  IOModeInfoBuffer[4]={0};

//赋值
IOModeInfoBuffer[0]={1,1}//-----


简单地说,就是:在语法规定中没有这种形式的赋值。语法是一种语言最基本的规定;超出了规定之外就称之为非法。

论坛徽章:
0
4 [报告]
发表于 2008-04-28 13:49 |只看该作者
了解,只是总爱这样用错了,谢谢

论坛徽章:
0
5 [报告]
发表于 2008-04-28 20:29 |只看该作者
可以这样来看,不妨试一试。
结构体的成员的变动没有直接的语言支持,要完成对已有的一个结构体类型的复合数据中的某一个成员进行改变或是赋值,是先做取出操作,在结构体中就是‘。’操作,在数组中就是“[]”操作。取出数据成员之后,在对这个已经取出的成员作付值操作‘=’,这时是由成员的类型来决定‘=’操作是否被支持了,对结构体来说‘=’ 时右值必是一个同类型的数据。数组的情况也类似。
若是分的更细一点,对成员的取出操作(或叫选择函数)的返回的数据是分为左值和右值的,对取出的成员被用在“=”的左边的是左值,用在右边的是右值。在c++中的操作符重载中会表现得更明显一些,一个是引用,一个是const引用。我的感觉是在学了c++之后,才会对c中的一些基本的概念有更深刻的理解,才发现以前的一些理解不是很透彻的。至少对于我是这样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP