#include <stdio.h>
#include <stdlib.h>
struct test
{
int a[5];
};
void print_test(struct test* a, const char* msg)
{
int i;
printf("%s:\t", msg);
for (i = 0; i < 5; ++i)
printf("%d ", a->a[i]);
printf("\n");
}
void reset(struct test* input, int start)
{
int i;
struct test tmp;
for (i = 0; i < 5; ++i)
tmp.a[i] = start + i;
*input = tmp;
}
int main()
{
struct test r1, r2, r3;
int i;
for (i = 0; i < 5; ++i) {
r1.a[i] = i;
r2.a[i] = i + 20;
r3.a[i] = i + 40;
}
print_test(&r1, "r1");
print_test(&r2, "r2");
print_test(&r3, "r3");
r1 = r2;
r2 = r3;
reset(&r3, 80);
print_test(&r1, "r1");
print_test(&r2, "r2");
print_test(&r3, "r3");
return(0);
}
我以前一直以为结构体复制需要用memcpy这种东西,今天才知道可以直接用=号,求教一下各位。
C语言
C语言中,结构体是一篇连续的内存空间,使用=赋值操作,底层用到的就是memcpy;
如果结构体中有指针变量;操作后。两个指针指向的同一块区域,而不会分配新的区域;
C++
在C++中,struct和class的作用相同,都是用于定义类,区别仅仅在于结构体内默认访问权限是public,而class定义的private;
而定义类的时候,c++编译器会为每个类自动加上默认构造函数、拷贝构造函数、以及赋值操作函数oprerator=
而通过=号操作时,
既:
operator=()函数内的实现细节为:对于基本类型,直接拷贝;对于自定义类型,调用拷贝构造函数拷贝;
结构体不是指针,所以可以直接赋值,而数组是指针,所以不行,我是这样认为的
结构体是一坨一坨的,赋值的时候是整坨赋过去的(底层也是memcoy)
直接用等于的话,太耗内存了,结构体指针更好一点吧。