前言:正文:
*p++,這種用法是很常見的,很有用的。但是不是很好理解,現在
來徹底分析下~~
首先*號和++號的優先順序是同一級,但是它們的結合方向是從右邊到左邊。
那麼很明顯核心p先和++先結合,這個就確定了關鍵的一件事——++會讓指標遞增,而不是指標指向的數,
也就是說會遞增的是p而不是*p。
但是這裡的++,是後++。後++有個特點——++會在本條語句執行完之後執行。
知道了,這些之後*p++就可以理解了,他就等價於:先執行*p,然後將p++。
陣列指標與指標陣列也是這麼分析:
int* p;
首先核心是p,再看p更喜歡誰~~
是最高優先順序的運算子(小括號排名第二,但是我們知道裡只能放常量,無法放變數,而核心往往是變數
所以看上去小括號更牛逼些)。
所以p先和結合,和結合之後就成了p,很明顯這是個陣列,p再和*結合就成了*p,
就成了指標陣列,應為p先結合,int* p的本質是個陣列,然後陣列內部存放的是int型的指標。
再看陣列指標:
int(*p);分析流程還是遵循以上規則:
首先找到核心p,小擴寬把p與隔開了,那麼此時p和*最近,他們可以結合,且結合成*p,很明顯*p是乙個
指標的形式,*p整體再和結合,這就成了陣列指標,應為p先和*結合,所以他的本質是乙個指標,這個指標
指向了乙個int型的陣列。
再看指標函式:
int *add();
首先核心是add,add先和優先順序更高的小括號結合,就成了乙個整體add(),很明顯這是個函式。
add()整個再和*結合,就是指標函式了。應為add先和小括號結合,所以他的本質是乙個函式。
乙個能返回(乙個int型)指標的函式。
最後看函式指標:
int (*add) ();此時add被乙個小擴隔開了,此時add和*最近,他們先結合,所以int (*add) ()本質
是乙個指標,這個整體再和小括號結合,就成了函式指標。本質是指標,所以這個是乙個指向函式的指標。
(函式的特點是返回值為int,引數列表為空)
對函式的再理解
函式的定義域是針對單獨的自變數而言的 引例,已知函式 f x 2x 1 的定義域是 0,infty 則意味著只能是 x in 0,infty 引例,已知 f 2x 1 x 2 的定義域為 1,1 則意味著需要先由 f 2x 1 x 2 變換得到 f x cfrac cfrac 具體變換 令 2x 1...
對DataFrame的再理解
1 構造需要從字典構造 cds codes pd.dataframe cds codes codes.set index code 如果要指定index,可以用set index,但要注意必須再次賦值。2 如果先用index陣列和列名構造乙個骨架,也可以 shijian 2011 2012 2013...
遞迴函式的再理解
學習到遞迴函式的寫法時,總是很難深刻理解到背後的設計思想。只知道問題被分解到了,還有乙個出口,外加呼叫自身,最後就能神奇的實現功能。後來,知道函式呼叫是一種棧式結構,每一次呼叫會把當前狀態壓棧,然後繼續往前走,直到呼叫的函式有結果了,再返回去。看似理解了背後的邏輯,但是,對於遞迴的掌握還是僅僅侷限於...