關於C語言的宣告而型別轉換

2021-09-01 09:45:37 字數 905 閱讀 9670

最近遇到一些總是讓人覺得奇怪的事情,例如,有個同學問我乙個c語句:

(*(void (*)())0)() ;

這個語句的功能?

有點令人無語,呵呵。從學習c語言以來都沒有遇到這樣的的語句。不過,直覺告訴我,這個東西一定非常有意思。研究了一些時間,知道這個是用來模擬開機時設計的乙個c語句宣告,計算啟動時,從位址為0開始呼叫這個函式。

與宣告有關係的還有乙個叫做型別轉換。例如:宣告為--int i ;轉換為--(int).這個我一直容易混亂,看似十分的簡單,但某個時候會混亂。這裡是把宣告的變數拿掉,用乙個括號括在裡面。

例如:int (*fp) fun(int) ;//宣告了乙個函式指標

(int (*) fun(int)) 1000 ;//把1000轉換成乙個函式指標

呵呵,慢慢發覺這個東西很有意思了:

#include//void (*show(int,void(*)(int)))(int);注意宣告與型別轉換不同。變數得放在引數的位置。

void show1(int a)

void show2(int b)

void (*show(int s,void(*p)(int)))(int)

int main(char * arg)

結果:

其實上面如果加上了typedef成為下面的那樣:

#includetypedef void (*fp)(int) ;

//fp show(int, fp);

void show1(int a)

void show2(int b)

fp show(int s,fp p)

int main(char * arg)

我們得好好感謝想出typdef這位前輩,能讓**簡單與明了這麼多。呵呵,,有感於這一瞬間。

關於C語言數量型別的轉換

今天做了幾題關於c語言資料型別轉換的題目,感覺自己是懂非懂,於是決定在研究研究。若參與運算量的型別不同,則先轉換成同一型別 更高的 然後進行運算。轉換按資料長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。a.若兩種型別的位元組數不同,轉換成...

關於C語言型別轉換情況

在c語言中,資料型別指的是用於宣告不同型別的變數或函式的乙個廣泛的系統,我們常用的算術型別包括兩種型別 整數型別和浮點型別。那麼相互之間具體是怎麼轉化的呢?了解一下型別轉換 不同資料型別的儲存大小和值範圍是不一樣的,程式在初始化的時候就已經設定了,例如 int a 9 float b 8.5 a,b...

關於C語言的隱式型別轉換

這個問題,本來以為自己早已爛熟於胸了,但是乙個測試程式還是把我給放倒了。首先給出以下c語言預設的隱式轉換規則 char,short int unsigned long double float ok,這裡看起來好像也完全沒問題。我們接下來看乙個簡單的小示例 include int main retu...