一个结构体 = 另一个结构体(同类型结构体之间可直接赋值操作)
两个同类型结构体变量可以直接赋值,不同类型结构体不能直接赋值。
#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;
}
这里要提一句,数组不能像结构体那样直接赋值。