c語言強制類型轉換指針
1. c語言 指針類型強制轉換
%x 默認輸入類型為int
所以傳過去的值實際上是0xaa(*p的值)但是當做int的時候會擴展
0xaa最高位為1所以會當做負數擴展為0xffffffaa
2. C語言空指針強制類型轉換
(unsigned
int
*)0x00100把0x00100轉化成指針
因為unsigned
int
*
是指針類型
好比(int)3.1415
就是取整數部分,這里不是轉化為變數吧,而是一個常量3
3. c語言指針類型強制轉換,#include問題
(1)*p的值是浮點數5.6的機內碼直接當int值看,具體是什麼要用專門的工具查.
(2)兩句都是對的
(3)結果是hibc.s1[3]='0'後s1="abc",strcat(s2,s1+1)將S1串從第二個字元開始連接到S2,這時S2為ghibc,puts(s2+1)從S2串的第二個字元輸出,所以結果為hibc
4. 關於c語言的指針強制轉化
int *p=(int *)0x
這個是將指針變數p指向一個絕對地址
而地址只是一個數值,需要轉成指針類型才能與p匹配
5. 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位移動指針。
6. c語言指針強制類型轉換
一個指針做算數加減的時候,字面上的加一或者減一,實際增加或者減少的值是其指向類型的空間大小
也就是說,p+1,實際增長的值是sizeof(*p)
所以,將p轉為int*後,加10,實際增加是10*sizeof(int)也就是40
而如果是p+2,由於p是char*,實際增加的是2*sizeof(char)=2
7. c語言指針轉換
沒有實用意義,只能用於練腦子,或考考雕蟲小技,或像魯迅筆下的孔乙己,賣弄一下「茴香豆的回字有多少種寫法」,以彰顯學問有多深。
*p 的「星號」是 「求值運算」,如果p是指針,*p 則是 指針 p 指向的值。
如果 p 不是指針, 那麼 這個 *p 就不知道是什麼東東,可能是乘法,也可能是錯的,那就閑著沒事練腦了。
(int *) 是「強制轉換」,有星號,則是「指針地址類型轉換」,例如 char *p="1"; (int *) p 就 把 p 的首地址變成 int 型 指針指向的地址,原來 p+1 是 p 的地址加1 ,現在 成了 p+sizeof(int)。 *(int *) p 就是首地址指向處4個位元組長度內存里的數值了。
*(int *)*p 不知道有何意義,要把程序寫全,才好猜,很費腦子的。簡單思維,可以說是一個錯誤表達式。
8. C語言中給一個地址強制類型轉換是為什麼(指針)
這是因為在給指針進行操作時比如p++,不同類型的指針的步長是不一樣的,比如Int 和char 類型的指針肯定是不同的,這對編譯器很重要。而void比較特殊,可以看作是通用指針,可以指向任何類型,它不能進行算術運算,因為編譯器無法確定它的步長,當然可以先進行強制類型轉換
9. c語言中指針類型強制轉換到底怎麼寫
假設你上面的例子中a是char*類型,則:
unsigned int*p = (unsigned int*)a;
這就是將a強制轉換成unsigned int*類型。