問:結(jié)構(gòu)體變量名本身到底代表了什么? 比如我聲明了一個結(jié)構(gòu) struct A { }; 然后我定義兩個結(jié)構(gòu)體變量: struct A aa,bb; 那&aa和&&bb表示變量aa和bb在內(nèi)存區(qū)中的首址,這樣,就可以用->或.進(jìn)行操作了,比如aa.data=bb.data什么的。 但是,單單一個aa或bb本身代表什么呢? 如果有aa=bb;這個賦值語句,那又意味著什么呢? c中好像并沒有規(guī)定結(jié)構(gòu)體變量名代表什么吧。是memcpy(&aa,&&bb,size)嗎?個人感覺應(yīng)該是,但為什么呢? 我分別在tc和vc上試了,確實(shí)是memcpy(&aa,&&bb,size)這種效果。 答: ① int a = 1; a代表一塊內(nèi)存區(qū)域,其中可以保存一個int型變量;a就是這塊內(nèi)存的名字。結(jié)構(gòu)體也是一樣,aa和bb也代表一個內(nèi)存區(qū)域,其中保存了struct A類型變量,對aa賦值就是對aa所代表的全部內(nèi)存中的內(nèi)容賦值。 &aa就是aa的地址,概念是不同的。 ② 在新的編譯器下,相同類型的結(jié)構(gòu)體可以直接賦值,即A = B; 在使用此特性前,建議測試一下你的編譯器,同時此代碼以后會不會用到其他編譯平臺。 否則,還是memcpy(&A1,&B1,sizeof(A1)); |
|