以前在使用結構體時沒有在結構體變數之間直接賦值,今天同事在檢視別人的**時,發現有兩個結構體變數直接賦值的語句當時感覺這個語句不對,認為在乙個結構體裡邊,既有一般的無符號整形與陣列,因為陣列的賦值是不能直接賦值,要記憶體拷貝,從這裡推理所以認為這個語句不對。於是問了一下,我當時以為是結構體指標變數的賦值,認為沒有問題。還和同事爭論了一番,當他讓我看源**時,發現是變數間的直接賦值,下意識中的判斷是不對,原因就和之前他理解的一樣。
於是晚上到住處在網上查了一下,說是可以的,因為是同樣的資料型別,而c語言在相同型別的變數間賦值時是直接記憶體複製的,即將他們的記憶體進行複製,這裡因為同樣結構體變數,屬於同一種變數,所以賦值時是按照他們的記憶體分布來直接拷貝的。
同時敲了一段很簡單的**測試一下,看到底是為什麼。發現確實是這樣。那麼c語言在變數間的賦值是如何進行的呢?
再查詢發現在c中乙個變數名其實就是乙個位址對應著一塊記憶體的起始位址,賦值操作符就是找到這塊記憶體的起始位址。
網上乙個關於結構體變數複製的帖子
#include
typedef struct
teststruct;
int main(void)
;teststruct b = ;
a.a = 1;
a.b = 2;
a.c = 3;
a.d[2] = 5;
b = a;
printf("a.a:%d \n a.b:%d \n a.c:%d \n a.d[2]:%d \n", a.a, a.b, a.c, a.d[2]);
printf("b.a:%d \n b.b:%d \n b.c %d \n b.d[2]:%d \n", b.a, b.b, b.c, b.d[2]);
return 0;
結構體是可以相互賦值的
include include include using namespace std int main 定義乙個操作員的結構體 struct operater operater ope1 operater ope2 cout 請輸入操作員的資訊 ope1.id cout 請輸入操作員的名字 ope...
c語言結構體可以直接賦值
from 下面是乙個例項 include struct foo foo1,foo2 define two structs with three different fields void struct assign void int main 我在ubuntu 13.04下使用gcc 4.7.3 編...
c語言結構體可以直接賦值
下面是乙個例項 include struct foo foo1,foo2 define two structs with three different fields void struct assign void int main 我在ubuntu 13.04下使用gcc 4.7.3 編譯執行得到...