黑馬程式設計師 指標的初步認識

2022-09-11 15:30:30 字數 2296 閱讀 7079

指標的概念:在計算機中資料式儲存在儲存器中的,儲存器的乙個位元組稱為乙個記憶體單元,不同的系統不同的資料型別它所佔據的記憶體單元不是同的,在64位的系統裡,乙個整型佔據4個位元組,乙個字元佔據1個位元組,為了方便訪問記憶體單元,每乙個記憶體單元都有乙個編號,這個編號也叫位址,通過位址可以找到相應的記憶體單元,所以我們就稱這個位址為指標。所以說指標實際就是記憶體的編號或者說是位址。

指標訪問變數:在沒有學到指標之前我們修改乙個變數一般是這麼做的:

1

int a = 5;2

3 a = 8;

第一行**是定義個整型變數a並初始化將(這裡系統會把變數名a轉化為變數的位址),第三行是訪問a所指向的位址修改相應的值,這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換,稱為變數的"直接引用"方式。

指標變數的定義的一般形式:

型別識別符號  *指標變數名

int *p1; //

指向int型別資料的乙個指標變數p1

float *p2; //

指向float型別資料的乙個指標變數p2

char *p3; //

指向char型別資料的乙個指標變數p3

指標如何訪問變數:

1

int a = 8;2

3int *p;

45 p = &a;

67 *p = 9;

第5行**是取到變數a的位址賦值給指標p,這樣p就指向了變數a,第7行**是將9賦值給p所指向的記憶體單元,這裡的「*」是指標運算子,與第三行的「*」有著完全不同的意義。如果省略掉這第7行的*,就相當於把9賦值給指標p,這是不允許的,因為指標變數是用來存放變數位址的,不要給它隨意賦值乙個常數

指標定義的同時可以初始化(上述**的第5行和第7行可以合併為一行)

1

int *p = &a;

指標的使用注意:

1

//錯誤**

2int *p;

34 *p = 9;

1

//錯誤**

2int a = 9;3

4float *p;

56 p = &a;

1 #include2

3int

main()

執行的結果為:

c中指標變數所占用的記憶體大小都是8個位元組,無論該指標變數是指向int型別的還是char型別的

指標的簡單應用:要求:通過函式的呼叫實現變數a與變數b的值互換

1

//錯誤**

2 #include3

//交換a與b值的函式

4void swap(int a,int

b)10

intmain()

你會發現程式的執行結果不是你想要的效果,主要是因為函式的形參只是數值的傳遞,形引數值的改變並不能改變實參的數值

示意圖

所以這樣之恩能夠是將形參a與b的值互換了一下,一旦函式呼叫結束,系統就會自動**形參的值,所以就達不到題目的要求,對於初學者還有可能會犯以下錯誤:

1

//錯誤**

2 #include3

//交換a與b值的函式

4void swap(int *p1,int *p2)

10int

main()

程式執行完的結果依然不是你想要的效果,我們可已從以下另個示意圖中看出其中的原因

呼叫剛開始:

一旦交換了p1和p2的值後

只要程式跳出被調函式,指標p1和p2就會消失。

正確地做法是:

1 #include2

//交換a與b值的函式

3void swap(int *p1,int *p2)

9int

main()

這個程式與上面的程式的不同的是,它通過指標變數簡介訪問並修改了main函式裡面的兩個整型變數n1和n2,這個例子很好的給我們演示了通過指標如何用乙個函式修改另乙個函式內部的變數值,若果沒有指標,是不可能辦到的,其實隻針的魅力遠遠不止這些,以後的學習中我們相繼會碰到

《黑馬程式設計師》 C語言的認識

c語言是一種通用的結構化語言。它的通用性和無限制性,使得它對許多程式設計者來說都顯得更加通俗和有效。無論是系統軟體或者資料的處理 非數值計算等,都可以很方便的使用c語言。c語言的主要特點 1 簡潔 緊湊 靈活。2 模組化 結構化。3 移植性強。4 生成目標 質量高,程式執行效率高。c程式的組成 乙個...

黑馬程式設計師 C語言的初步知識

1 c語言的程式構成方式 1 函式是c語言的基本組成單位,每個函式有自己的功能 2 乙個程式有且只有乙個主函式 3 如果乙個程式沒有主函式,則這個程式不具備執行能力 4 函式都是只有在呼叫的時候才會去執行的,主函式由系統呼叫 5 主函式的格式必須按照規範寫 主函式的格式 include 程式的入口 ...

黑馬程式設計師 對委託的初步理解

今天看到論壇裡有人問委託的問題,想想自己也搞不懂委託到底是什麼東西,好像以前稍微看過一點但沒具體怎麼看,所以今天就看了一些資料。看完後,我的理解是這樣的,這只是初步的理解,不對的請見諒,希望提出來,共同進步。委託呢其實就是乙個方法的大集合,就像列舉一樣,它把要用的方法都存到了裡面,當要呼叫什麼方法的...