C語言 指標 陣列中的指標詳解

2021-10-12 22:26:02 字數 2449 閱讀 8619

指標本身已經是非常底層的東西了,什麼是底層?一般說的底層就是和硬體比較接近的地方。

另外強調一點:計算機最重要的就是對資料的處理,所以資料的存放你是一定要知道的——資料存放在記憶體中!底層的資料就是二進位制數,這你可以暫時不用管。

所以程式設計的本質,就是改變資料的流向。比如和人家qq聊天,就是將資料從頭腦到手到鍵盤到記憶體到檔案或顯示器的過程。其中,記憶體就相當於乙個資料中轉站,所以本次我們講指標,也是圍繞這個中轉站開始講的。

所謂指標,就是指向記憶體的乙個標記,所以指標就經常形象化就是記憶體中的位址。所以,你完全可以把位址當作指標。

問題1:記憶體為什麼需要位址?

這個問題就相當於你問我這個世界上為什麼會有這麼多地名?地名就是標記,目的是為了【找到回家的路】,也就是找到家,對吧。所以位址就是為了找到記憶體,從而找到記憶體中的資料。因為前面我們說過,程式設計的本質就是改變資料的流向,而記憶體就是資料的中轉站,所以我們必須給這個中轉站一定的位址編號,方便我們控制資料的流向。

所以說位址最終還是為資料而服務的。因為我們要的不是位址,而是位址裡面的寶藏和東西對吧,這些寶藏就是資料。

問題2:位址是資料嗎?

對的,位址也是資料,但是計算機能單獨識別和區分位址這種特殊的資料,而且,位址一般都比普遍的資料更短,對吧!

接觸比較廣的同學,一般都會知道c語言中的變數可以分為這兩種。

1、區別:

普通變數可以直接往裡面存資料:

int a=

12345

;//a是普通變數

int a=

12345

;//a是普通變數

//宣告:*號代表這是乙個指標變數,p是它的名字

int*p;

//使用:僅僅使用它的名字!

p=&a;

這樣下來,指標p就攜帶了變數a在記憶體中對應的位址。

注:有些初學者就經常寫成:*p=

&a這就沒有正確區分宣告和使用兩個概念:

1.宣告:宣告有這個東西(名字),這個東西是什麼型別的。

2.使用:使用名字

2、轉換:為了能夠使用資料,一般需要轉化為普通變數才能實現。

這時候你可能就會發問了:不是說scanf函式需要的是位址嗎,還需要什麼轉換?

其實,scanf函式也是由**寫成的,然後放進標頭檔案,所以說,只是你看不見scanf的那個大括號裡面的內容而已,或許裡面使用了轉化呢!因為我們一直都是在使用名字——變數名,函式名,所以總會給我們一些錯覺。

1.普通變數公升級為指標變數:定址符&

2.指標變數降級為普通變數 :指向符*

例子:

int a;

//a是普通變數

scanf

("%d"

,&a)

;//&a是位址,指標

printf

("%d"

,a);

//a是普通變數

char c;

scanf

("%c"

,&c)

;//&c是位址,指標

printf

("%c"

,c);

//c是普通變數

char d[10]

;scanf

("%s"

,d);

//d是位址,指標

printf

("%s"

,d);

//d是位址,指標

注意:只有基本資料型別的變數的printf才需要普通變數,

而陣列是構造的資料型別,因此需要的仍然是指標。

這裡用的是陣列的首位址。

最後的宣告:學習和使用指標需要掌握的三個方面:

①指標資料和普通資料本質是沒有區別的,但是因為計算機能識別區分他們,

所以你必須把它倆當成兩種不同的資料型別,以免混用。

比如:

②指標變數與普通變數之間的轉換:指標有多重指標,但普通變數只有一級。普通變數是我們在程式設計中使用資料的視窗,指標與他們都存在對應關係。所以一定要學會判斷指標的級別和哪個是普通變數,哪個是指標變數。因為指標變數一般是不可以直接用於提取記憶體中的資料的。

比如:

③構造資料型別定義的普通變數名本質是乙個指標變數。注意區分宣告定義格式和使用格式,宣告定義一般包含兩部分:資料型別,變數名。但是使用格式,是使用它的變數名。

比如陣列名,指標變數名,結構體聯合體定義的變數名,這些都是指標,包括函式名。

比如:

C語言 陣列指標詳解,區別於指標陣列。

題意 使用指標 p 和prt 表示a 1 2 include include include include using namespace std int main int prt 3 a 不等於 prt 4 意義不同,用法相同 int t 4 指標陣列,即宣告了4個指標,要for迴圈初始化分別指...

詳解C語言中的陣列指標與指標陣列

詳解陣列指標與指標陣列 陣列指標 一 區分 首先我們需要了解什麼是陣列指標以及什麼是指標陣列,如下圖 int p 5 int p 5 陣列指標的意思即為通過指標引用陣列,p先和 結合,說明了p是乙個指標變數,指向乙個大小為5的陣列。所以,int p 5 即為乙個陣列指標。int p 5 則是乙個大小...

C語言指標詳解 陣列與指標

我們可以在函式實參中直接使用陣列名來使用陣列,陣列元素的指標就是陣列元素的位址。我們又知道陣列名代表陣列首元素的位址。因此 p a 0 p a 這兩條語句是等價的。我們再看一下它的初始化語句 int p a 0 或寫成 int p a 下面介紹下陣列指標的運算 當指標已經指向乙個陣列元素時可以進行 ...