C语言结构体能否整体赋值

在C语言中,相同结构的结构体变量可以直接赋值,依据ANSI/ISOC标准,只要它们类型相同。例如,str_t类型的str1和str2可以互相赋值。但如果定义了两个成员完全一样的不同结构体类型(如dataA和dateB),尽管成员列表一致,但它们被视为不同类型,直接赋值是非法的。示例代码展示了合法的结构体赋值操作及其结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


先放结论
可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件。

整体赋值规则
ansi/iso C规定:“相同类型的结构体是可以直接赋值的”;
合法赋值: 如date1和date2都是date结构体类型的变量,可以这样赋值:date1= date2;
非法赋值: 假设申明了两个成员列表完全一样的两个结构体类型(dataA,dateB),即使他们的成员列表是一样的,编译器会当作两个完全不同的类型,令两个结构体类型的变量间赋值,则是非法的。
 

#include <stdio.h>

typedef struct {
    int a;
    int b;
} str_t;

int main()
{
    str_t str1;
    str_t str2;
    str1.a = 5;
    str1.b = 6;

    str2 = str1;
    printf("%d\n", str2.a);
    printf("%d\n", str2.b);
}

输出结果:

5

6

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值