⑴ c語言強制類型轉換
1、int a;int b;double c = (double) a;double c = (double) b;int a = (int) c;這就是一種強制轉變方法。
⑵ C語言中強制類型轉換
我知道啊,呵呵,因為printf("%d",'12'),列印的是存儲12的內存地址上的內容,即ASCII碼值,12的低位數存儲在低位地址,即1存儲在低位,高位存儲在高位地址,0x32就是2的ASCII碼,0x31就是1的ASCII碼,所以是0x3231,轉換成10進制就是12849!
⑶ C語言強制類型轉換
強制類型轉換是把變數從一種類型轉換為另一種數據類型。
例如,如果想存儲一個long類型的值到一個簡單的整型中,需要把long類型強制轉換為int類型。可以使用強制類型轉換運算符來把值顯式地從一種類型轉換為另一種類型。
發生在同一個編譯系統中,比如說把int轉化為longint,在VC++6.0裡面,longint和int都是4個位元組,不會有問題的,但是如果把int類型轉化為short類型那就裝不下了,簡而言之就是長類型不能轉化為短類型。
int類型如果要轉化為float、double、longdouble類型的時候只是末尾多了幾個0,但是反之轉化,就會出現數據的損失,小數部位都被省略掉了。
賦值中的類型轉換
當賦值運算符兩邊的運算對象類型不同時,將要發生類型轉換, 轉換的規則是:把賦值運算符右側表達式的類型轉換為左側變數的類型。
由於C語言中的浮點值總是用雙精度表示的,所以float 型數據只是在尾部加0延長為double型數據參加運算,然後直接賦值。double型數據轉換為float型時,通過截尾數來實現,截斷前要進行四捨五入操作。
以上內容參考:網路-C語言類型強制轉換
⑷ 關於C語言強制類型轉換的問題
因為你把j定義成一個int變數,執行完
j=(float)i;一句以後事實上i=3,j=3,但輸出的時候卻要求以%f輸出,printf檢查到j的類型為int不滿足%f的格式,故而輸出時未將j的值代入到"%d,%f"中,而是輸出%f格式的默認值0.000000。相當於執行了printf("%d,%f",i);
你把int
i,j;一句改成int
i;
float
j;就能夠輸出
3,3.000000了
⑸ 關於c語言的指針強制類型轉換的問題,如圖,定義了4個char型數組,其中兩個數組是的絕
出現這樣的問題是因為在這個16位系統中,要求所有的16位或者32微數據都是對齊的數據。
這個對齊指的是,數據從偶數地址開始存放。這樣的話,這個存放在存儲器中的數據可以更有效地存取;否則這個數據的存取將需要花更多的時間(更根本的原因要深入到微機原理課程了。而實際上16位數據一定佔用了兩個地址所對應的單元,比如一個16位數起始地址為0x200,那麼他就佔用了0x200和0x201這兩個地址所對應的單元,16位系統中這樣的(以偶地址開始存放的)兩個單元的數據可以一次被處理器所讀寫)。為了存取數據花費不必要的更多的的時間的情況出現,系統就禁止這樣存放16位或者32位數據。這樣16為或者32位數據的地址就總是偶數。於是當把一個奇數作為一個16位數的起始地址就會有這樣的錯誤。
至於要避免,可能是不能避免這種情況但可以避免出錯。這樣就需要在轉換之前做一個檢查,如果要轉化的是個奇數地址,就不要直接轉換了,而是要變通的處理了。怎麼變通,我想要視數據具體要如何處理而定。
⑹ C語言題 關於強制轉換類型 麻煩有詳細過程 謝謝
這個和強制類型轉換沒有啥關系。主要考察的是對指針進行++運算的時候,需要跳過的位元組數。
對一個指針進行++運算,需要跳過他本身那個類型的長度。舉個例子:
比如int *p,p++,int類型佔用4個位元組,那麼p++一次就跳過4個位元組。
比如short *p,p++,short類型佔用2個位元組,那麼p++一次就跳過2個位元組。
再看上面的題目:
char *p="abcdefgh"
long *q;
q=(long*)p;
將p強制轉換成(long*)賦值給q,即q也指向"abcdefgh"這個字元串的首地址
q++;
這個時候執行q++的話,由於long類型佔用4個位元組,那麼q就一次跳過4個位元組,就指向"efgh",跳過了「abcd」4個位元組。
r=(char*)q;
然後再將q強制轉換成(char*)賦值給r,即r指向了q指向的"efgh"這個字元串的首地址
printf("%s\n",r);
然後列印r的話,就列印的是efgh了。
⑺ 關於C語言強制類型轉換
當然不可以,你可以參加教材後面的有關「運算符的附錄」,了解 強制類型轉換運算符 的用法。