強制類型轉換的問題,謝謝 在C中不同類型的結構體之間可以強制類型轉換嗎?看的一些程序中這樣用過。 在C++中不同的類之間也是,很困惑。我以前的理解,類型只是用來標識如何獨取變量名所對應的一段內存,可是內存分配的多少都不一樣?? 還有的傳遞參數時把一個對像o,做int(o)的強制類型轉換??? 請高手指點一些, 給點提示讓我去理解也好。 |
強制類型轉換的問題,謝謝 可以強制轉換。 我看過GTK+的代碼,就是靠強制轉換實現類似於C++的繼承的。 |
強制類型轉換的問題,謝謝 有老式的和新式的....新的用XX_cast...老的就是C的... |
強制類型轉換的問題,謝謝 謝謝, 可是我不明白,如果一個結構中沒有這個成員,怎麼訪問呢?或者說根本就訪問不到。 |
強制類型轉換的問題,謝謝 結構就是數據,成員就是偏移 |
強制類型轉換的問題,謝謝 yzc2002 兄 說的很對,我也贊同, 你的意思是說有的成員是訪問不到了?? |
強制類型轉換的問題,謝謝 轉換其地址很常見,可是轉換struct或union是不行的啊。不同的struct和union之間也不能轉吧,我試了一下,失敗了。 |
強制類型轉換的問題,謝謝 謝謝。我以前發帖後以為不會當時就有人回復的,很感謝大家的討論和幫助:) 地址是可以隨便轉換得。我認為也就是靠類型來控制獨取的內存的大小,和如何「解釋」讀入的二進制,不知這樣理解對嗎? 我見過結構體之間的強制類型轉換,再者,一個對像o,使用int(o);是什麼意思, 難道是把o對應的內存首地址轉換為整型?還是說只讀取對應內存的第一個整型長度??? 不好意思,我只是很想知道 |
強制類型轉換的問題,謝謝 >;>;我見過結構體之間的強制類型轉換 可以嗎?怎麼我試驗的失敗了,編譯時說:conversion to non-scalar type requested |
強制類型轉換的問題,謝謝 我是在一個多線程的程序中看到的,兩個結構體唯一的差別是一個比另一個多一個整型的成員, 程序中是這樣轉換的: main(){ ........... struct type1 a; function((void *)a); .......... } funtion (void *c) { .......... struct type2 b; b = (struct type2)b; ........... } 然後在funtion中使用了type1 和type2中公有的成員 原代碼網頁 http://www-128.ibm.com/developerworks/cn/linux/thread/posix_thread3/#resources |
強制類型轉換的問題,謝謝 我見過結構體之間的強制類型轉換,再者,一個對像o,使用int(o);是什麼意思, 難道是把o對應的內存首地址轉換為整型?還是說只讀取對應內存的第一個整型長度??? 1 你所見到的,應當是結構體的指針類型的強制轉換. 2 應當不是c或C++. |
強制類型轉換的問題,謝謝 |
強制類型轉換的問題,謝謝 >;>;1 你所見到的,應當是結構體的指針類型的強制轉換. 同意你的看法。確實是這樣,而且可以正常訪問同樣的成員,我只是想知道這種類型的轉換在訪問成員時有什麼規則嗎??可以訪問同樣的成員,不能訪問沒有的成員??有的傻傻的感覺,可是內存還是存在的。 >;>;2 應當不是c或C++. { 。。。。。。 VMLAppWindow * o = new VMLAppWindow(g_AppX, g_AppY, APPWIDTH, APPHEIGHT); 。。。。。。 HTML_WIDGET * v; v = new HTML_WIDGET(0,0,(int)o); 。。。。。 } viewml瀏覽器中的一段代碼。VMLAppWindow和HTML_WIDGET都是類。請把家指教 |
強制類型轉換的問題,謝謝 暈死,害我們看了半天,原來樓主看錯了。 |
強制類型轉換的問題,謝謝 ???斑竹什麼意思? 可以說明白點嗎? 我也暈了 |
強制類型轉換的問題,謝謝 VMLAppWindow * o; 這是一個指針呀! 然後你在把它得值,轉換成 int類型。32位機上每個指針都是4字節,當然可以進行轉換。 如果是你所說的結構,就不可能。 你的前提都說錯了,建議讀一下論壇裡的如何提問,能把自己的問題講清楚。 |
強制類型轉換的問題,謝謝 有的數據可以根據需要轉換一種形式,然後在根據需要轉換回來,比如: char *p="fasdf"; FUN((void *) p) { char *pp = (char *)P; } 這種情況也適用於結構體。典型的轉換是struct sockaddr 和sockaddr_in 的轉換。結構體的轉換是按成員字節在內存中的分配循序進行轉換的。 |
強制類型轉換的問題,謝謝 ^-^ 不好意思, 代碼太長把我都嚇住了。還是要謝謝大家。cu真是個好地方。慚愧ing。 |
強制類型轉換的問題,謝謝 >;>;結構體的轉換是按成員字節在內存中的分配順序進行轉換的 你的意思是說按照成員的聲明的先後一個挨一個的「翻譯」內存中的二進制?那麼如果一個結構中沒有這個成員呢,多餘的內存就不管是嗎??也就是這個成員訪問不到? 謝謝~~~ |
強制類型轉換的問題,謝謝 舉個例子吧。 定義兩個結構 struct Person { char name[10]; char sex; int age; }; struct Employee { char name[10]; char sex; int age; time_t hireDate; }; struct Employee* emp = (struct Employee *)malloc(sizeof(struct Employee)); strcpy(emp->;name, "Bruce"); emp->;sex = 'M'; emp->;age = 23; ... struct Person* bruce = (struct Person*)emp; 現在bruce獲得了訪問name, sex,age域的能力,但要訪問hireDate就超出他的能力之外了。 結構體的指針本身就隱含了允許訪問特定大小的存儲區域,以及對存儲區域內某幾個字節的 內容如何進行解釋的行為。 struct Bird { int wings; int legs; }; void birdFly(struct Bird* bird) { } void donkeyRun(struct Donkey* donkey) { } struct Donkey { int legs; ... }; struct Donkey* donkey = (struct Donkey*)malloc(sizeof(struct Donkey)); struct Bird* bird = (struct Bird*) donkey; //由於指針在32位機上都是4字節的,可以進行強制轉換,但解釋出來的東西沒有意義 //從邏輯上看,騾子不坐飛機的話,是沒辦法飛起來的。 所以,要進行類型轉換,要考慮類型兼容的問題。 |