c學習的基本問題 3 指標解析 typedef

2021-06-16 05:52:13 字數 2947 閱讀 9234

指標宣告示例:

0.const char * char_p; <==> char const * char_p;

解析:  指標所指的物件是唯讀的,但是指標是可以修改的。

1.char * const char_p;

解析:指標所指的物件是可以修改的。但是指標是唯讀的。

2.const char * const char_p;

解析:指標與指標所指的物件都是唯讀的

3. char * char_p;

解析:指標與指標所指的物件都是可以修改的的

4.char * char_p[20]

解析: char_p是乙個陣列,每乙個元素為char *

5. char (*char_p)[20];

解析: char_p是乙個指標,指向乙個含有20個char的陣列;

6. int(*fun())();

解析:fun為乙個函式,返回乙個函式指標。

7.int(*fun());

解析:fun為乙個函式,返回乙個int型別的陣列

8.int(*fun)();

解析:fun為乙個陣列,每乙個元素為乙個函式指標。

9.char * const * (*next)()

解析:fun是乙個函式指標,返回乙個指向(指向char型別的常量指標)的指標。

10. char* (*

cc[10]

)(int **p);

解析:cc是乙個陣列,每乙個元素為接受乙個int**的引數,返回char* 的函式

11. void ( *

signal(int, void(*func)(int))

)(int)

解析:signal是乙個函式

signal 的引數為:int和乙個函式指標。 該函式指標指向乙個接受int型別引數返回void型別的函式

signal的返回值為乙個函式指標,該函式指標為:乙個接受int型別引數返回void型別的函式

c語言宣告的優先順序規則:

0.宣告從它的名字開始分析,然後按照優先順序順序依次讀取。

1.優先順序高迪依次是:

00 宣告中被括號括起來的部分

01 字尾操作符:

括號()表示乙個函式,方括號表示乙個陣列

02 字首操作符:星號*表示「指向...的指標」

2. 如果const和volatile關鍵字後面緊跟型別說明符(如long,int等),那麼它作用於型別說明符。在其他情況下,const和volatile關鍵字作用於它左邊緊鄰的指標星號(*)。

typedef關鍵字

typedef類似於巨集文本替換-它並沒有引入新型別,而是為現有型別取乙個新名字。

tpedef的格式與變數宣告完全一樣,只是多了typedef關鍵字,向你提醒它的實質。

示例:typedef void(*ptr_to_func)(int);

void ( *

signal(int, void(*func)(int))

)(int) --> ptr_to_func signal(int,ptr_to_func);

建議:0.不要在乙個typedef中放入多個宣告,如下所示:

typedef int * ptr,(fun)(),array[5];

ptr 是「指向int的指標」型別

fun是「指向返回值為int的函式的指標」型別

array是「長度為5的int型別陣列」型別

1.不要將typedef嵌入到宣告中間部分。

typedef與巨集文本替換的區別:

0.可以使用其他型別說明符對巨集型別名進行擴充套件,但對typedef所定義的型別名卻不能這樣做。

#define peach int

unsigned peach i ; //沒問題

typedef int banana;

unsigned banana i;// 錯誤!非法

1.在連續幾個變數的宣告中,用typedef定義的型別能夠保證宣告中所有的變數均為同一種型別,而用#define定義的型別則無法保證。

#define int_ptr int *      經過巨集擴充套件

int_ptr chalk,cheese;     --------> int * chalk,cheese;

chalk和cheese為不同型別,chalk是乙個指向int的指標,cheese則是乙個int

typedef char * char_ptr;

char_ptr bently,rolls_royce;

bently,rolls_royce 型別相同,都是指向char的指標。

typedef使用情況:

0.陣列,指標及函式的組合。

1.可移植型別。typedef unsigned int  size_t;

2.為強制型別轉換提供乙個簡單的名字。

3.避免在用在struct結構定義中。struct定義中,始終使用結構標籤,即使它並非必須。這種做法可以使**更清晰。

C 指標的學習 3 指標與函式

1.函式指標 函式的指標 位址 乙個函式在編譯時被分配給乙個入口位址,這個入口位址就稱為函式的指標。在c 中可定義乙個指標變數,用它指向函式,然後通過改指標呼叫此函式。這種變數稱為函式指標變數,簡稱函式指標。定義格式如下 資料型別 函式指標名 引數型別表 注意括號的位置!區別於指標函式的定義。注意 ...

目標檢測的基本問題一 指標問題mAp和FPS

主要指標是map和fps map 首先iou 精度precision 和召回率recall 1.根據iou計算tp,fp 首先我們計算每張圖的pre和label的iou,根據iou是否大於0.5來判斷該pre是屬於tp還是屬於fp。顯而易見,pre1是tp,pre2是fp,pre3是tp。2.排序 ...

C 之父力作學習筆記3 指標

由於工作需要轉成了c 好久沒有學c 了,之前學了一段時間的c 也寫過兩篇,放在部落格園裡的,現在有專門的c 部落格,以後就在這裡寫了。以下是前兩篇的位址 c 之父力作學習筆記1 c 之父力作學習筆記 今天來簡單說一下指標,可以說指標是乙個難點,是一把雙刃劍,也許高手才能運用自如,像我這樣的菜鳥就會傷...