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;
====如题参考答案说为结构体中的数组,不能直接赋值,为什么呢?那应该怎么赋值呢?求大侠指教 展开
(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数组。
t1.mark=t2.mark;//非法,数组不能直接整体赋值。
t1=t2;//合法,在此之后,t2.mark数组将被整体复制到t1.mark数组。
展开全部
t2.mark=t1.mark;//mark为结构体中的数组,不能直接赋值??
是的,数组名是个静态地址值,不能被修改,如果想把数据存储到其中,可以用memcpy()函数进行内存拷贝,或采用循环进行赋值
#include <string.h>
memcpy( t2.mark, t1.mark, sizeof(t2.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 );
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询