本文是學習linux c程式設計一站式學習的學習筆記
一,指標與陣列 對於
1 ,指標之間是可以相互比較,同時指標之間也可以做減法運算,不過是有條件的。指標之間比較的是位址,只有只想同乙個陣列中元素的指標之間相互比較才有意思。指標之間相減表示兩個指標之間相差的元素個數,同樣只有指向同乙個陣列元素的指標之間相減才有意義。
2 ,陣列名與指標的區別
在取數元素時用陣列名和用指標的語法一樣,但,如果把陣列名作為左值使用,和指標就用區別了。如:
pa++
合法,而
a++非法。陣列名做右值時轉換成指向首元素的指標,但做左值仍然表示整個陣列的儲存空間,而不是首元素的儲存空間,但支援取位址運算子
&,所以
&a是合法的。
const 限定符
const 限定符和指標結合在一起經常出現在很多公司的面試題中。 1
,const int *a
;int const *a;
這兩種表示的意思相同。
a是乙個指向
const int
型的指標,
a所指向的記憶體單元不可改寫,所以
(*a)++
是不允許的,但
a可以改寫,所以
a++是允許的。 2
,int * const a a
是乙個指向
int型的
const
指標,*a
是可以改寫的,但
a不允許改寫。
3,const int * const a a
是乙個指向
const int
型的const
指標,因此*a和
a都不允許改寫。
可以通過下面的方法來記憶: 把
*讀成指向,先讀
*前面的,後讀
*後面的內容,最後加上指標兩字。 如:
int *const a
;讀成:
a是指向
int型的
const
指標。
const
規則兩條: 1
,指向非
const
變數的指標或非
const
變數的位址可以傳給
const
變數的指標。編譯器做隱式轉換。 2
,指向const
變數的指標或
const
變數的位址不可以傳給指向非
const
變數的指標。下面的**將出錯。
三,指向指標的指標與指標陣列
1,指向指標的指標
這樣定義之後,表示式
*ppi取pi
的值,表示式
**ppi取i
的值,即0。
i、pi、
ppi這三個變數之間的關係如下圖所示。 2
,指標陣列
如:int *a[10];表示int型指標陣列,一共有10個元素,每個元素都是int*.
3,指標陣列同指向陣列的指標
下面定義乙個指向陣列的指標,該陣列有10個
int元素
int (*a)[10];
同指標陣列的定義
int *a[10];
相比,僅僅多了乙個
()括號。我們可以認為
比*有更高的優先順序,如果a先和
*結合則表示
a是乙個指標,如果a先和
結合則表示
a是乙個陣列。
int *a[10];
這個定義可以拆成兩句:
tydef int * t;
t a[10] ;
代表int*,a
則是由這種型別的元素組成的陣列
對int (*a)[10]
;可以拆分成:
typedef int t[10] ;
t * a ; t
代表10
個int
組成的資料型別。
a則是指向這種型別的指標。
指向陣列的指標的使用:
int a[10] ;
int (*pa)[10]=&a ;
注意,&a[0]
表示陣列a
的首元素的首位址,而&a
表示陣列a
的首位址,顯然這兩個位址的數值相同,但這兩個表示式的型別是兩種不同的指標型別,前者的型別是int *
,而後者的型別是int (*)[10]
。*pa
就表示pa
所指向的陣列a
,所以取陣列的a[0]
元素可以用表示式(*pa)[0]
。注意到*pa
可以寫成pa[0]
,所以(*pa)[0]
這個表示式也可以改寫成pa[0][0]
,pa
就像乙個二維陣列的名字。下面的例子:
則
pa[0]
和
a[0]
取的是同乙個元素,唯一比原來複雜的地方在於這個元素是由10個
int
組成的陣列,而不是基本型別。這樣,我們可以把
pa
當成二維陣列名來使用,
pa[1][2]
和
a[1][2]
取的也是同乙個元素,而且
pa
比
a
用起來更靈活,陣列名不支援賦值、自增等運算,
而指標可以支援,
pa++
使
pa
跳過二維陣列的一行,指向
a[1]
的首位址。
學習筆記之指標
指標是什麼?這個問題很複雜,有的說是變數,有點說是位址,就我個人來說,我比較傾向於 指標就是儲存位址的變數,根據它所指向位址的型別,可以有多種型別 指標相對於變數有什麼用?對我來說最大的用處通過 間接訪問符,在函式內部直接更改位址裡面內容。詳見例題1 怎麼使用指標?1.建立指標 int p 2.初始...
C 學習筆記之 this指標
目錄this指標指向被呼叫的成員函式所屬的物件 include include using namespace std class person int main 0x61fe8c 1 0x61fe88 2 include include using namespace std class pers...
機器學習之模型評估指標學習筆記
前段時間工作中發現自己對模型評估指標中的auc有點忘了,因此打算重新看一下然後寫個部落格記錄一下。首先簡單介紹一下混淆矩陣,查全率 也叫做召回率,recall 和查準率 也叫做精確率,precesion 在進行模型評估的時候,單單使用準確率accuracy 正確樣本數 總樣本數 有時候並不能很好的對...