c语言关于结构体赋值和数组赋值
1、今天在看代码的时候发现了一种新的用法,就是用一个结构体指针直接给结构体赋值,因为我印象中这种赋值操作一般都是使用memcpy,闲话少说直接上代码
struct test {
uint8_t a;
uint8_t b;
uint8_t c[8];
uint16_t d;
};
static struct test t = {0};
static struct test t1 = {
.a = 1,
.b = 2,
.c = {3, 4, 5, 6, 7, 8, 9, 10},
.d = 11,
};
int main(void)
{
struct test *p = &t1;
t = *p;
printf("t: a=%d, b=%d, d=%d\n", t.a, t.b, t.d);
for (int i = 0; i < 8; i++) {
printf("t.c[%d]=%d\n", i, t.c[i]);
}
system("pause");
return 0;
}
这里定义了一个结构体类型,test,然后定义了两个结构体变量和一个结构体指针
这里结构体赋值有两种第一种是代码中的先将结构体地址赋值给结构体指针,然后直接引用结构体地址赋值给另一个结构体变量
还有一种是直接复制
t=t1;这样也是可以的,打印出来显示的值完全一样
但是注意这种赋值必须保证两个结构体变量的类型是一致,这样就可以直接赋值了,我理解是因为结构体是按顺序存储的,两个相同的结构体变量,里面数据排列方式是一样的那么直接赋值就相当于一个copy操作
2、那么问题来了,为什么数组不可以这样使用呢,两个相同类型的数组为什么不能直接这样赋值呢
定义两个相同的大小和类型的数组,然后直接赋值发现直接编译错误,语法不允许这种操作