函數(shù)指針強轉(zhuǎn)盡量不要有,僅用于類型實際是相同的,但定義的變量類型不同,如
站在用戶的角度思考問題,與客戶深入溝通,找到大祥網(wǎng)站設(shè)計與大祥網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋大祥地區(qū)。
另一個程序員寫了段代碼,要求你提供一個函數(shù)指針,類型如下:
typedef int (*ftype)(int,int);
但你寫的函數(shù)是 unsigned int fun(unsigned int,unsigned int),參數(shù)一個有符號,一個無符號,在你知道符號不影響結(jié)果的情況下,可以強制轉(zhuǎn)換。
所以強制類型轉(zhuǎn)換就是按照某個變量的類型取出該變量的值,再按照***to***的規(guī)則進(jìn)行強制轉(zhuǎn)轉(zhuǎn)換。如果是(類型名)常數(shù),則是將該常數(shù)按照 常數(shù)to類型 的規(guī)則進(jìn)行強制轉(zhuǎn)換。
指針也是一個變量,它自己占據(jù)一個4個字節(jié)的地址空間(由于程序的尋址空間是2^32次方,即4GB,所以用4個字節(jié)表示指針就已經(jīng)能指向任何程序能夠?qū)ぶ返降目臻g了,所以指針的大小為4字節(jié)),他的值是另一個東西的地址,這個東西可以是普通變量,結(jié)構(gòu)體,還可以是個函數(shù)等等。由于,指針的大小是4字節(jié),所以,我們可以將指針強制轉(zhuǎn)換成int型或者其他類型。同樣,我們也可以將任何一個常數(shù)轉(zhuǎn)換成int型再賦值給指針。所有的指針?biāo)嫉目臻g大小都是4字節(jié),他們只是聲明的類型不同,他們的值都是地址指向某個東西,他們對于機器來說沒有本質(zhì)差別,他們之間可以進(jìn)行強制類型轉(zhuǎn)換。
指針 to 指針的強制類型轉(zhuǎn)換是指將指針?biāo)傅膬?nèi)容的類型由原先的類型轉(zhuǎn)換為后面的類型。
例如:
int a = 1;
int *p = a;
float *p1 = (float*)p;
則p和p1的值都是a,但是*p是將a地址中的值按照int型變量進(jìn)行解釋,而*p1則是將a地址中的值按照float型變量進(jìn)行解釋。
一個指針做算數(shù)加減的時候,字面上的加一或者減一,實際增加或者減少的值是其指向類型的空間大小
也就是說,p+1,實際增長的值是sizeof(*p)
所以,將p轉(zhuǎn)為int*后,加10,實際增加是10*sizeof(int)也就是40
而如果是p+2,由于p是char*,實際增加的是2*sizeof(char)=2