一个结构体 = 另一个结构体(同类型结构体之间可直接赋值操作)

两个同类型结构体变量可以直接赋值,不同类型结构体不能直接赋值。

#include <stdio.h>

struct TEST{
int a;
int b;
char c[3];
char *ptr;
};

int main(){
	struct TEST a={1,2,{'a','b','c'}, (char *)"jkjk"};
	struct TEST b={0};
	printf("a.a=%d a.b=%d a.c[0]=%c a.ptr=%sn", a.a, a.b, a.c[0], a.ptr);
	printf("b.a=%d b.b=%d b.c[0]=%cn", b.a, b.b, b.c[0]);
	b = a;
	printf("b.a=%d b.b=%d b.c[0]=%c b.ptr=%sn", b.a, b.b, b.c[0], b.ptr);
	return 0;
}

运行结果(VS2019):
在这里插入图片描述

还有种方法使两个同类型结构体内容相同就是用memcpy函数来拷贝,也是可以的,因为结构体本身就是一个内存区。

int main() {
	struct TEST a = { 1,2,{'a','b','c'}, (char *)"jkjk" };
	struct TEST b = { 0 };
	printf("a.a=%d a.b=%d a.c[0]=%c a.ptr=%sn", a.a, a.b, a.c[0], a.ptr);
	printf("b.a=%d b.b=%d b.c[0]=%cn", b.a, b.b, b.c[0]);
	//b = a;
	memcpy((char *)&b, (char *)&a, sizeof(a));
	printf("b.a=%d b.b=%d b.c[0]=%c b.ptr=%sn", b.a, b.b, b.c[0], b.ptr);
	return 0;
}

这里要提一句,数组不能像结构体那样直接赋值。
在这里插入图片描述