強制類型轉換的問題

 
強制類型轉換的問題,謝謝

 在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字節的,可以進行強制轉換,但解釋出來的東西沒有意義
//從邏輯上看,騾子不坐飛機的話,是沒辦法飛起來的。

所以,要進行類型轉換,要考慮類型兼容的問題。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值