有趣的C語言指標(一) 指標是個什麼東西?

2021-08-18 14:18:17 字數 1893 閱讀 1647

大一的時候開始接觸了c語言,但是至今為止,一直有乙個糟糕的問題,困擾著我:c語言中的指標到底是啥?為什麼感覺很難的樣子?為什麼即使我寫了很多的c語言的**,還是有可能會出現指標最基本的錯誤?不是說好的「指標就是位址的嗎」?為什麼還有「指向int的指標」?「指向double的指標?」

首先 基本大部分的初學者拿到有問題的概念的時候,都會先去問一下度娘的看法~:

好吧,說的很清晰,到此結束。。。

當然這是開個玩笑~

首先套用k&r的《the c program language》中的定義,「指標是一種儲存變數位址的變數」。注意了,指標是什麼?指標是變數!

既然是變數,那麼我們研究一下變數型別,在c語言標準中有這樣的話:

指標型別(pointer type)可由函式型別、物件型別或者不完全的型別派生,派生指標型別的型別為引用型別。…由引用型別t派生的指標型別有時稱為「指向t的指標」

我們知道,基本的資料型別包括intchardouble等。在c語言中,還有一種型別為指標型別~。指標型別不是單獨存在的,它是由其他型別派生而來的。也就是說,有個指標變數,其型別為,「指向int的指標型別」或者「指向double的指標型別」。因為先有了「指標型別」,所以有了「指標型別的變數」和「指標型別的值」。「指標型別」是型別,所以和int型別、double型別一樣,存在「指標型別的變數」和「指標型別的值」。但是要命的是,「指標型別」、「指標型別的變數」和「指標型別的值」經常被簡單(*****)的統稱為「指標」。

這裡的「指標型別的值」實際上也就是記憶體的位址。變數(不是指標型別的變數)的內容是儲存在記憶體的某個位置的,也就是乙個位址。類似於生活中郵件系統,我們使用「門牌號」來確定「住址」。在記憶體中,我們給變數分配了「門牌號」。通過查詢門牌號來找到住在這個「住址」裡面的人。

我們可以這樣簡單的舉個例子:

「小王住在門牌號為***-001的房子裡,

小張住在門牌號為***-002的房子裡,

小李住在門牌號為***-003的房子裡。」

這裡面存在三個型別為「人型生物」的變數小x,值分別為,小王、小張和小李。當然也存在著記錄他們房子的位置的指標,指標型別為「指向人型生物的指標型別」, 指標型別的變數為門牌號,指標型別變數的值為***-001、***-002、***-003

如圖所示:

如果小x的住址是連續的,那麼我們可以用門牌號表示第乙個住址 」***-001「

當然我們可以用**實現乙個簡單的指標例項。

#include "iostream"

using

namespace

std;

int main(int argc, char

const *argv)

在我的執行環境中的輸出結果是這樣的:

「門牌號」c裡面可以儲存「人形生物」a的位址。

plus:由於本人水平有限,如有錯誤的地方請及時指出,幫我進步,謝謝…

C語言指標學習 一 指標是什麼

僅供自己學習使用,謝謝!指標的定義 位址 記憶體單元的編號 從0開始的非付整數 在32位機器上,記憶體最大為4g 2 32個位元組 指標 指標就是位址,位址就是指標 指標變數就是存放記憶體單元編號的變數,或者說指標變數就是存放位址的變數 指標和指標變數是兩個不同的概念 需要注意的是,我們平時在敘述的...

C 學習一 指標

摘要自 c 指標 菜鳥教程 runoob.com 指標也就是記憶體位址,指標變數是用來存放記憶體位址的變數。所有實際資料型別不管是整型 浮點型 字元型,還是其他的資料型別,對應指標的值的型別都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。唯一不同的是指標所指向的變數或常量的資料型別不同。一 c...

c語言指標初探 一 指標與陣列

一 陣列名指標 c 編譯器將陣列名解釋為指標 include using namespace std int main cout sz 編譯器將陣列名解釋為陣列記憶體區域的首位址,對一維陣列來說要實現對某個元素的訪問,既可以用陣列名 下標的形式,也可以用間接引用 陣列名 偏移 陣列元素的指標形式 指...