#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)
直接用等於的話,太耗內存了,結構體指針更好一點吧。