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

设有定义: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;
====如题参考答案说为结构体中的数组,不能直接赋值,为什么呢?那应该怎么赋值呢?求大侠指教

数组不能整体赋值,需要逐个元素赋值,但是如果这个数组是一个结构体的成员,可以通过结构体之间的直接赋值间接达到数组整体赋值的效果,即:

t1.mark=t2.mark;//非法,数组不能直接整体赋值。
t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-18
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 );
}

本回答被网友采纳
相似回答