**引言:在C語言中,指針的地位是不言而喻的,要想很好的掌握C語言,掌握指針是必須的,這也是C語言不同于其他語言的地方。**
**(一)指針的指針**
**例子:**
~~~
int i;
int *pi;/*把pi初始化為指向變量i,pi = &i*/
int **ppi;/*把ppi初始化為指向變量pi,ppi = &pi*/
~~~
初始化指針后,就可以使用它們了。例如i = 'a'; *pi = 'a'; **ppi = 'a';具有相同的效果。
在一條簡單的對i賦值的語句可以完成的任務情況下,為什么還要使用更為復雜的涉及間接訪問的方法呢?這是因為簡單賦值并不總是可行,例如鏈表的插入。
**(二)高級聲明**
~~~
int f; /*聲明一個整型變量*/
int *f; /*一個指向整型的指針*/
intf();/*把f聲明為一個函數,它的返回值是一個整數*/
int *f(); /*f是一個函數,它的返回值類型是一個指向整型的指針*/
int (*f)(); /*使f成為一個函數指針,它所指向的函數返回一個整型值*/
int *(*f)(); /*f是一個函數指針,只是所指向的函數的返回值是一個整型指針*/
int f[]; /*f是個整型數組*/
int *f[]; /*f是數組,它的元素類型是指向整型的指針*/
int (*f[])(); /*括號內的表達式*f[]首先進行求值,所以f是一個元素為某種類型的指針的數組。表達式
末尾的()是函數調用操作符,所以f肯定是一個數組,數組元素的類型是函數指針,
它所指向的函數的返回值是一個整型值*/
int *(*f[])(); /*f是一個指針數組,指針所指向的類型是返回值為整型指針的函數*/
~~~
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配