學習筆記之 指標

2021-05-26 06:07:59 字數 2957 閱讀 9229

本文是學習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 正確樣本數 總樣本數 有時候並不能很好的對...