C的指標疑惑 C和指標13 高階指標話題 上

2022-07-16 09:24:08 字數 1943 閱讀 1488

int *f();

f為乙個函式,返回值型別是乙個指向整形的指標。

int (*f)();

兩對括號,第二對括號是函式呼叫操作符,但第一對括號只起到聚組的作用。

f為乙個函式指標,它所指向的函式返回乙個整型值。

int *(*f)();

f是乙個函式指標,指向的函式返回值是乙個整形指標。

int *f

下標的優先順序更高,所以f是乙個陣列,元素型別是指向整形的指標。

int (*f) ();

這裡有兩對括號,第一對括號的表示式*f首先進行求值。f是乙個元素為某種型別的指標的陣列。第二對括號是函式呼叫操作符。總結:f是乙個陣列,陣列元素的型別是函式指標,它所指向的函式的返回值是乙個整型值。

int (*f)(int,float

);int *(*g)(int,float);

第乙個,f是乙個函式指標,所指向的函式接受兩個引數。並返回乙個整形。

第二個,g位乙個陣列,陣列的元素型別是乙個函式指標。它所指向的函式接受兩個引數,並返回乙個整形指標。

函式指標

注意:簡單宣告乙個函式指標並不意味著它馬上就可以使用。對函式指標執行間接訪問之前必須把它初始化為指向某個函式。

int f(int

);int (*pf)(int) = &f;

注意:初始化表示式中的&操作符是可選的,因為函式名被使用時總是由編譯器把它轉換為函式指標。&操作符只是顯式地說明了編譯器將隱式執行的任務。

int

ans;

ans = f(25

);ans = (*pf)(25

);ans = pf(25);

第一條語句使用名字呼叫函式f,但它的執行過程中可能和你想象的不太一樣。函式名f首先被轉換為乙個函式指標,該指標指定函式在記憶體中的位置。

第二條語句:對pf執行間接訪問操作,它把函式指標轉換為乙個函式名。

第三條語句和前面兩條語句的效果是一樣的。間接訪問操作並非必需,因為編譯器需要的是乙個函式指標

函式指標的應用舉例:

node * search_list(node *node,void

const *value,int (*compare)(void

const *,void

const *))

return

node;

}int compare_ints(void

const *a,void

const *b)

上面函式使用:

desired_node = search_list(root,&desired_value,compare_ints);

函式指標陣列:宣告並初始化乙個函式指標陣列。唯一需留心之處就是確保這些函式的原型出現在這個陣列的宣告之前。

double add(double,double

);double sub(double,double

);double mul(double,double

);double div(double,double

);double (*oper_func)(double,double) =;

初始化列表中各個函式名的正確順序取決於程式中用於表示每個操作符的整形**。這個例子中add是0,sub是1,mul是2.

呼叫操作

result = oper_func[oper](op1,op2);

c 實驗13指標

請使用者輸入5個整數,將其中最小的數字與第乙個數對換,最大的數字與最後乙個數對換。要求 除主函式外,寫三個函式,乙個函式負責輸入5個數,乙個函式負責對換最小的數字與第乙個數,乙個函式負責對換最大的數與最後乙個數,最後將5個數在主函式進行輸出。不能通過陣列實現功能,必須使用指標實現功能 到這裡居然報 ...

c指標 2個疑惑。

先註明,寫給自己看的。1.include include int main ptr printf d ptr return 0 剛剛看這樣的題目,感覺蠻簡單的。ptr定義指向了 m array的首位址,char型別1位元組。乙個int4個位元組 ptr 後,指標ptr的值加上1乘sizeof int...

0702 指標(C語言高階)

一 c語言中的記憶體管理 c語言程式在編譯後需要載入記憶體中才能開始執行。記憶體中對於資料的劃分不是隨機的,而是根據這個資料的性質分段進行劃分的。某段記憶體區域只會儲存相應的資料。具體來說,c語言對於記憶體空間的劃分可以分為以下幾個區域 1 區 這段區域主要用來儲存編譯後的函式體的二進位制 以及會用...