C指標分享之“複雜指標”
上一篇的“基礎指標”都已經熟練掌握了吧,小夥伴們。今天我們加深點難度,來看看“複雜指標”。在以後的分享中,我將循序漸進的把指標引入實戰的專案中,所以,現在我們要做的就是踏踏實實的打好基礎,Let’s Begin。延續我們之前的風格,通過例子讓你掌握“複雜指標”。
1、int (*func) (int *p) <函式指標>
分析:
(1).*func: 表示func是一個指標;
(2).(*func) (): 表示(*func) 是一個函式;
(3).func: 表示指向這類函式的指標,這類函式帶有int*型別的引數,並且返回值是int型別;
結論:
func是一個指向函式的指標,該函式有一個int*引數,並返回一個整型數。
2、int(*func) (int *p, int (*f)(int *)) <函式指標>
分析:
(1).*func: 表示func是一個指標;
(2).(*func) (): 表示(*func) 是一個函式;
(3).func: 表示指向這類函式的指標,這類函式帶有兩個引數,且返回值是int型別。其中,一個引數是int*型別,另一個引數是函式指標;
結論:
func是一個指向函式的指標,該函式有一兩個引數,一個是int*,另一個是int*型別的函式指標,該函式返回一個整型數。
3、int (*func[5]) (int *p)
分析:
(1).(*func [5]): 表示func是含有5個元素的陣列指標;
(2).(*func [5]) (): 表示(*func [5]) 是一個函式;
(3).func: 表示陣列中的元素是指向這類函式的指標,這類函式有一個int*型別的引數,且返回值是int型別;
結論:
func是有5個指標的陣列,該指標指向一個函式,該函式有一個int*型別的引數並返回一個整型數。
4、int (*(*func)[5]) (int *p)
分析:
(1).*func: 表示func是一個指標;
(2).(*func) [5]: 表示這個指標指向一個數組;
(3).(*(*func) [5]): 表示陣列中的元素是指標;
(4).(*(*func) [5]) (): 表示陣列的元素是指向函式的指標;
結論:
func是一個指向陣列的指標,這個陣列的元素是函式指標,這些指標指向帶有int*型別形參,且返回值是int型別的函式。
5、int (*(*func) (int *p)) [5]
分析:
(1).*func: 表示func是一個指標;
(2).(*func) (): 表示func是一個指向函式的指標(即函式指標);
(3).(*(*func) ()) ——> 替換為:(*F);
(4).(*F) [5]: 表示F是一個指向陣列的指標;
(5).將F替換回去;
結論:
func是一個函式指標,這類函式有一個int*型別的形參,返回值是指向陣列的指標,所指向的陣列的元素是具有5個int型別元素的陣列。
That’s all.到這裡,就分析完我們在平時工作中可能會用到的較為複雜的指標,看完是什麼感覺呢?思路清晰?or 蒙圈?淡定,淡定,小夥伴們,經過上述例子的分析,我來總結一下如何解讀複雜指標,只有做到正確無誤的解讀才能在以後的工作中熟練的使用哦。
【Tips】:
使用“右左法則”:首先從未定義的識別符號(本文中指的是func<亦可理解為變數>)最裡面的圓括號看,然後向它右邊看,再向左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裡面所有的內容,就跳出圓括號。重複以上過程,直到整個宣告解析完畢。
希望通過這兩篇對指標專門的講解,我們能夠熟練的解讀出任意指標的宣告。沒有什麼捷徑哦,就是練習,練習,練習。
歡迎關注“C程式媛”微信公眾號,讓我們一起在C語言的道路上一直走下去吧。
相關推薦
C指標分享之“複雜指標”
上一篇的“基礎指標”都已經熟練掌握了吧,小夥伴們。今天我們加深點難度,來看看“複雜指標”。在以後的分享中,我將循序漸進的把指標引入實戰的專案中,所以,現在我們要做的就是踏踏實實的打好基礎,Let’s Begin。延續我們之前的風格,通過例子讓你掌握“複雜指標”。 1、int
C語言之複雜指標簡析
指標陣列和陣列指標 指標陣列:首先它是一個數組,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是“儲存指標的陣列”的簡稱。 陣列指標:首先它是一個指標,它指向一個數組。在 32 位系統下永遠是佔 4 個位元組,至於它指向的陣列佔多少位元組,不知道。
c檔案操作之位置指標設定函式fseek
fseek 原型:int fseek(FILE *stream, long offset, int fromwhere); 功能:重定位流(資料流/檔案)上的檔案內部位置指標 注意:不是定位檔案指標(
C語言自學之指標理解
目的: 通過以下學習,希望能理解指標的概念,理解指標和陣列的關係,理解指標的定義,掌握指標的用法。 1. 簡述 用C語言寫的程式碼基本上都用到指標,掌握好指標的概念對學好C有很大幫助。 為了方便理解我們可以把指
C++之智慧指標std::shared_ptr簡單使用和理解
1 智慧指標std::shared_ptr相關知識和如何使用 我們這裡先說下智慧指標std::shared_ptr,因為我看到我我們專案c++程式碼裡面用得很多,我不是不會,所以記錄學習下 先讓ubuntu終端支援c++11,如果自己的電腦還沒配置號,可以先看下我的這篇部落格
C++小知識——記憶體管理之智慧指標
在C++中,動態記憶體的管理是通過一對運算子來完成的: 1)new:在動態記憶體中為物件分配空間並返回一個指向該物件的指標 2)delete:接受一個動態物件的指標,銷燬該物件,並釋放與之關聯的記憶體 因為這樣的原因,我們時常很難確保在正確的時間去釋放記憶體,甚至我們忘記了去釋放記憶體,這
C++之智慧指標和普通指標單例模式兩種實現
1 問題 實現c++的單例模式,這裡測試分別寫了通過智慧指標返回物件和普通返回指標 2 程式碼測試 include <iostream> #include <mutex> #include <m
c++ 入門之物件指標
我們想 像使用基本資料型別一樣使用類,自然,類自然也有指標,我們通過下面的程式碼來領教一下物件指標存在的意義: 1 # include "iostream" 2 # include "string" 3 # include "ctime" 4 # include "cstdlib" 5 co
c++ primer plus書之--c++函式, 陣列引數與指標的關係2
陣列怎麼在函式的引數中進行傳遞: // simple function #include "iostream" using namespace std; const int Size = 8; // 函式原型, 可以不寫變數名, 變數名也可以與函式定義的變數名不同 int sum_arr(in
C++ premier plus書之--C++函式, 陣列引數與指標的關係1
C++的實參和形參 double cube(double x); int main() { int a = 5; cube(a); } 這裡a被稱為實參, x被稱為形參, 形參就是用於接收傳遞值的變數,
c++ 之智慧指標:儘量使用std::make_unique和std::make_shared而不直接使用new
關於make_unique的構造及使用例程,MSDN的講解非常詳細 (https://msdn.microsoft.com/zh-cn/library/dn439780.aspx ) 使用過程中,主要有這麼幾個關鍵點: 1. make_unique 同 uni
C++Boost庫學習之智慧指標 shared_ptr
目錄 1.共享指標shared_ptr ^ 使用例子 ^ #include<boost/shared_ptr.hpp> using namespace boost; using std::cout; using std::endl; str
《C++語言程式設計基礎》學習之陣列指標與字串
陣列元素在記憶體中順次存放,它們的地址是連續的。元素間實體地址上的相鄰,對應著邏輯次序上的相鄰。 陣列名字是陣列首元素的記憶體地址,陣列名是常量,不能被賦值 陣列名是陣列的指標,指向首個元素的地址,多維陣列的n-1維是指標一維陣列初始化: 在定義陣列時給出陣列元素的初始值:列
C語言之二級指標
#include<stdio.h>int main(){ int a=10; //宣告一個int型變數a int
C++知識點備忘錄之函式、指標(五)
1、引數為空 void say_hi():在C++中,括號為空與在括號中使用關鍵字void是等效的——意味著函式沒有引數。 2、傳遞陣列 為將陣列型別和元素數量告訴陣列處理函式,請通過兩個不同的引數來傳遞他們: void fillArray(int a
C語言之指標指標陣列、陣列指標、函式指標、二重指標、泛型函式
指標陣列:數組裡面的每個元素都是指標;char* array[]={"hello","world","ooo"};理解:陣列中有三個元素,每個元素都是char*型別,陣列中儲存的是三個字串的首地址;64位的作業系統中指標佔8個位元組;32位作業系統指標佔4個位元組;注意:指
【原始碼分享】經典指標和K線圖系列之MACD
最近從經典技術指標開始學習量化策略,有些在talib中有打包好的函式,但我還是希望自己在編的過程中學習策略的思想、進一步改進基礎策略。今天學習了移動平滑異同平均線(Moving Average Convergence Divergence,簡稱MACD指標)策略。MACD是查拉爾·阿佩爾(Geral
C語言之指標專題一:指標變數和指標所指向的記憶體空間是兩個不同的概念
指標變數和指標所指向的記憶體空間是兩個不同的概念 char*p = "123456";//p是一個指標變數存放在臨時棧區,"123456"是一個字串常量存放在常量區,變數p儲存的是字串的地址 char*str = (char*)malloc(100);//將分配的100位
C++複習筆記(六)之函式指標和函式模板、類模板
一、函式指標 函式指標在C語言中的作用類似於c++中的多型,都是可以實現框架的搭建,程式碼的相容性高。 函式三要素:名稱、引數、返回值 C語言可以通過typedef為函式型別重新命名,語法 typedef 返回值型別(型別名稱)(引數列表);如下程式碼所示: #in
C指標程式設計之道(四)- 指向檔案型別的指標
檔案結構體和檔案指標 // 在c語言中,對檔案的操作一般是用庫函式來實現的 // ANSI(美國國家標準學會)規定了標準的輸入輸出函式,用他們對檔案進行讀寫以規範和提高程式設計效率 // 每個被使用的檔案在記憶體中都會開闢一個區,用來存放檔案的有關資訊,而