C語言之指標

2021-08-14 08:35:07 字數 2125 閱讀 7422

c語言指標

c語言的指標應該是c語言的精華了吧!在之前的培訓中我們沒有提及過指標的概念,但是我們卻經常用到和它相關的一些東西。本篇文章就以下幾個方面說明指標的用法。

計算機記憶體的位址

陣列元素的另一種訪問方式

指標的定義

給函式傳址

計算機程式執行的話是會把程式載入到記憶體中的,那麼同理,在乙個程式的生 命週期內,變數也會被載入到記憶體。有些變數隨程式生而生,隨程式滅而滅;有 些變數是在程式執行到某一時刻出現在記憶體中,它的使命完成之後就又灰溜溜的 消失了,它的生命週期與程式並不是同步的。

①計算機記憶體的位址

計算機記憶體和硬碟的最大區別在於記憶體的訪問速度要優於硬碟的訪問速度,所 以程式在執行的過程中是會把程式載入進入記憶體進行執行的。在c語言中,我們之 前定義變數,給變數賦值,其實就是在操作記憶體中的資料。記憶體要想訪問的話, 我們肯定要找乙個標記,來給每乙個記憶體編號,使它們獨一無二。就像快遞小哥 一看你家位址,就知道把快遞給你送到哪一樣。這樣我們如果想訪問任何一塊內 存的資料,就只需要知道它家在哪不就行了!

c語言中的位址是按照乙個位元組為乙個單位,從記憶體的第 乙個位元組,一直編號,編碼到最後乙個位元組。

②陣列元素的另一種訪問方式

陣列可以通過下標法來訪問陣列中的某乙個元素,比如

#include int main()

; //列印陣列中第二個元素的值

printf("%d",myarray[1]);

}

同時還有另外一種方式

#include int main()

; printf("%d",*(myarray+1));

}

其實myarray[1]是*(myarray+1)的簡化版本。其實這裡myarray不僅僅是陣列 的名字,它還是陣列首元素的首位址。

③指標的定義

上面說明了陣列的另外一種訪問方式,並且陣列名還是陣列首元素的首位址, 指標--就是儲存這個位址的變數。

指標和我們之前陣列名的區別就是:陣列名雖然是陣列首元素的首位址,但是 它是常量,無法進行賦值操作。這也印證了我們之前所說的不能讓通過對陣列名 賦值的方式,對整個陣列中所有元素進行賦值的操作。因為常量的值是不能改變 的。但是指標就不一樣了,它是儲存位址的變數。變數的值是可以隨時改變的。

上面我們也知道了,陣列名的+1操作還有*操作,這兩個操作影響的不僅僅是1 個位元組,是和陣列型別相關的。那麼指標既然能儲存陣列位址,那麼同樣,指標 也能進行取值的操作,所以指標也需要指定型別。

#include int main()

; p = myarray;

for(int i=0;i<5;i++,p++)

printf("%d",*p);

}

#include int main()

④給函式傳址

我們在之前提及過函式還有函式的傳參問題。函式形參只是在執行函式的時候才會為它分配記憶體,執行完成之後就消失在程式的視線中了,實參的話就相當於給形參的初始值。通俗易懂的就是函式會複製乙份給它傳進來的引數存入記憶體等到程式執行完了之後把複製的這份引數釋放掉。這也印證了傳給函式乙個引數,函式內部無論如何改變都無法影響實參的值。

#include void myfun(int x)

int main()

既然指標是儲存位址的變數,指標可以對位址進行操作,那麼我們是不是可以把位址作為引數傳給函式呢?

#include void myfun(int *p)

int main()

有人會說,這和我們之前所說的不一樣,第二個程式可以改變x的值。真的是這樣嗎?

我之前說的是不能改變傳給函式實參的值。第二個程式傳給函式的實參是什麼?

我們不妨列印一下,在執行函式前後實參到底變沒變。

#include void myfun(int *p)

int main()

結果是什麼:實參並沒有改變。這與我們之前所講的函式傳參絲毫不矛盾。

通俗易懂的講就是,外賣小哥拿著外賣單給你送外賣,單子上只寫著你的位址,小哥送完外賣之後把單子扔了,雖然外賣小哥再也找不到你了,但是你已經收到了外賣。給函式傳的引數就相當於外賣單的位址,小哥就是函式裡面執行語句。根據位址在找到記憶體中某個值,把他在記憶體中的值改變,函式結束他不知道記憶體中那個值在哪了,但是那個值已經被改變了。

C語言之指標

指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...

C語言之指標

指標的概念 什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。指標變數的定義 int p 該變數用來存放乙個空間的位址。p 代表該指標指所指向記憶體空間中的值,切記指標只能存放有效的記憶體空間位址,不能存放其...

C語言之指標

指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...