C语言中结构体中的数组,不能直接赋值吗

设有定义:struct{charmark[12];intnum1;doublenum2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是(C)(A)t1=t2;(... 设有定义:struct{char mark[12];intnum1;double num2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是(C)
(A) t1=t2;
(B) t2.num1=t1.num1;
(C) t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值??
(D) t2.num2=t1.num2;
====如题参考答案说为结构体中的数组,不能直接赋值,为什么呢?那应该怎么赋值呢?求大侠指教
展开
 我来答
匿名用户
2015-09-18
展开全部
数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:

t1.mark=t2.mark;//非法,数组不能直接整体赋值。
t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。
kaixingui2012
2015-09-18 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6406万
展开全部
t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值??
是的,数组名是个静态地址值,不能被修改,如果想把数据存储到其中,可以用memcpy()函数进行内存拷贝,或采用循环进行赋值

#include <string.h>
memcpy( t2.mark, t1.mark, sizeof(t2.mark) );
追问
能否敲个程序具体举例一下啊,不太明白该如何赋值
追答
#include <stdio.h>
#include <string.h>

struct{char mark[12];int num1;double num2;}t1,t2;
void main()
{
t1.num1=1;
t1.num2=1.1;
strcpy( t1.mark,"hello" );

memcpy( t2.mark, t1.mark, sizeof(t2.mark) ); //只对t2.mark数组赋值
t2.num1=2;
t2.num2=2.3;
printf("t1=[%s %d %f]\n", t1.mark,t1.num1,t1.num2 );
printf("t2=[%s %d %f]\n", t2.mark,t2.num1,t2.num2 );

t2=t1 ; //结构体完整拷贝
printf("t1=[%s %d %f]\n", t1.mark,t1.num1,t1.num2 );
printf("t2=[%s %d %f]\n", t2.mark,t2.num1,t2.num2 );
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式