c語言強制指針類型轉換
① 51單片機中c語言int能轉換為unsigned char 指針類型嗎怎麼轉換
1、可以轉換,強制轉換就行。例如:
int a=100;
unsigned char * c = (unsigned char *)a;
2、強制類型轉換
當操作數的類型不同,而且不屬於基本數據類型時,經常需要強制類型轉換,將操作數轉化為所需要的類型。強制類型轉換具有兩種形式,稱轎悉乎為顯式強制轉換和隱式強制類型轉換。
顯式強制類型轉換
顯式強制類型轉換需要使用強制類型轉換運算符,格式如下:
type(<expression>)
或
(type)<expression>
其中,type為類型描述符,如int,float等。<expression>為表達式。經強制類型轉換運算符運算後,返回一個具有type類型的數值,這種強制類型轉換操作並不改變操作數本身,閉悉運算後操作數本身未改變,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述強制類型轉換的結果是將整型值0xab65的高端兩個位元組刪掉,將低端兩個位元組的內容作為char型數值賦值給變陸缺量cChar,而經過類型轉換後nVar的值並未改變。
② c語言中指針類型強制轉換到底怎麼寫
假設你上面的例子中a是char*類型,則:
unsigned int*p = (unsigned int*)a;
這就是將a強制轉換成unsigned int*類型。
③ C語言中指針強制轉換賦值
你這樣理解是有問題的,你應該知道&的優先順序是高於類型轉換的,所以是先取指針,然後再強制轉換為你需要的類型。例如第一句,Rcs9000_ram_port_flag必然是在前面定義為RCS9000_PORT_FLAG*類型,但後面的&g_Prot_flag[port_no]肯定在前面定義的並不是此類型,安全起見應該先將此指針轉換為RCS9000_PORT_FLAG*類型然後再賦值。假如&g_Prot_flag[port_no]為char類型,那麼指針加1的時候則移動一個位元組(即指向下一個8位數據),假如RCS9000_PORT_FLAG*類型為int類型(假設是32位系統,即int為32位),則強制轉換後按32位移動指針。
④ 求大牛解決c語言指針的強制轉化問題!!!!!加上(short *)有什麼用
指針的強制轉換 並不影響最終的結果
更多的是給編譯器用的。
在C裡面對指針不同類型相互賦值做的要求級別並不高
當源類型和目標類型不匹配時只是報一個warning, 而C++裡面就是錯誤了。
比如你這銀悄個 正確做法應該是
p=(char *)&a;
至於為什麼要加強制轉換, 其最根本的原因是
不同類型的指針,進行相互賦值的時候是很容易出現越界的。比如char *p, 這個指針可能只指向一個位元組的單元,(char c; p=&c;這樣), 如果賦值給int*q=p; 然後按照*q去賦值取值,就是絕對的越界操作。
對於編程中,如果不小心寫錯了,那麼就會引起不可預知後果,甚至可能是你運行測試幾十次都正常,但真正出成品了,到脊搏客戶手裡莫名其妙的出錯,查起來超難。
所以要求加強制轉換,就是為了避免這樣的不小心。 人性化一點的說,就是告訴編譯器,我知道我在不同類型之間賦值,我已經知道了這樣做的後果,也已經確定了可以承擔這個後果,你不要管我了。 於是編譯器就不管了,後果鋒野渣嘛,自負。
⑤ C語言函數指針的強制轉換有什麼作用
所以強制類型轉換就是按照某個變數的類型取出該變數的值,再按照***to***的規則進行強制轉轉換。如果是(類型名)常數,則是將該常數按照 常數to類型 的規則進行強制轉換。
指針也是一個變數,它自己占據一個4個位元組的地址空間(由於程序的定址空間是2^32次方,即4GB,所以用4個位元組表示指針就已經能指向任何程序能夠定址到的空間了,所以指針的大小為4位元組),他跡改的值是另一個東西的地址,這個東西可以是普通變數,結構體,還可以是個函數等等。由於,指針的大小是4位元組,所以,我們可以將指針強制轉換成int型或者其他類型。同樣,我們也可以將任何一個常數轉換成int型再賦值給指針。所有的指針所佔的空間大小都是4位元組,他們只是聲明的類型不同,他們的值都是地址指向某個東西,他們對於機器來說沒有本質差別,他們之間可以沒悄進行強制類型轉換。
指針 to 指針的強制類型轉換是指將指針所指的內容的類型由原先的類型轉換為後面的類型。
例如:
int a = 1;
int *p = &a;
float *p1 = (float*)p;
則p和p1的值都是&a,但是*p是將&a地址中的值按照int型變數進行解釋,而*p1則是將&a地址中的值按照float型變數進行枯州渣解釋。