C 指標運用

2021-09-29 21:21:33 字數 2654 閱讀 7360

前提:

計算機裡,記憶體調取變數,需要知道變數的實體地址相當於現實生活中的地標,當鎖定地標之後,程序從記憶體呼叫變數時才能做到精確無誤。

而我們指標就提供了地標值,哲學上通俗的說,在一定時間內地標值精確的代表了一棟房子,我們可以說當我們說起地標值,就相當於說起了房子,當我們說起了房子,也就是地標值。

指標———地標值———房子,就這樣,三位一體,連體嬰兒,你就是我,我就是你。

現在我們再看指標的定義

指標:是所定義的變數的位址容器(或者抽象地說它代表變數)

指標———位址———變數,就這樣三位一體,連體嬰兒,你就是我,我就是你。

指標到座標值與指標到位址,可以實際聯絡在一起,

但是上公升到房子和變數時,需要抽象相等。

就像你和身份證一樣

計算機如何獲取變數的位址?

加入&符號代表了取a變數的位址

int a =

1;std::cout <<

&a;``

列印出來的結果是一串整數,

說明指標/位址是其實是一串無符號的整數。

這串整數是cpu將程序裡的變數分配在記憶體這個硬體上隨機的物理位置。

而怎麼分配才能讓我們掌控,才合理,才高效?作業系統說了算,這就扯遠了。

這是大前提,

當我們去接收對應型別的變數的位址時,我們要建立對應型別的儲存變數位址的容器(指標)ps;之後都用指標來代替。

int a =10;

int* p =

&a;

同理推廣到陣列

int a[10]

;int

* q =

&a;//儲存陣列a的首位址,也就是第乙個元素位址

//c++星號寫在資料型別後,代表整形指標型別

int* p =

&a[5];

//儲存陣列a第6個元素位址,陣列下標從0開始

同理既然p代表了a[5]的位址,抽象的代表了a[5],

由於陣列連續存放,p+1就是a[6]

(ps: a+5等價於&a[5])

如果在指標前加星號的話,代表取當前指標所容納位址的那個變數的值。

通俗點說,就是指標一旦加上了星號(*p),*p就不是抽象的代表a[5]了,*p就是a[5]

同理*(p + 1)就是a[6]

經過我們上面所知道的,指標變數作為位址的容器,儲存的是一串無符號的整數,當函式傳參時,作為值傳遞的話,相當於複製該值。將該值的副本傳過去了,我自己本身沒有改變。

打個比方:我告訴別人我的思想,別人接受了我的思想進行了自己的創作變成他自己的想法,別人把我的想法改變了,但是我的思想沒有變。

void

change

(int x)

intmain()

//此時a值列印出來是1,我的思想並沒有變

如果要讓a值改變,需在傳參時加入&符號,作為引用

意為將給傳入的a取別名為x,對x改也就是對a改

void

change

(int

&x)int

main()

//此時a值列印出來是233,a改變了

與取位址符&不同

和型別在一起的是引用,和變數在一起的是取址

int* &p出來,&就是代表引用

接下來我們講點題外話

我們只看&p,&p是指取指標p的位址,p作為位址容器只存了變數的位址,如果它也要擁有姓名的話,再設個指標q指向它,那它作為儲存變數位址的容器,那麼它也有位址了,q作為容器存著p這串無符號整數的位址,一環套一環,一環套一環,,,無窮盡也。

究其本源在於這串無符號整數它既能作為是某個地方的座標值,又能作為座標值的座標值,如果我叫張進,那張進作為一串名字也要擁有它自己的標籤,標籤也要擁有自己的標籤,,,標籤也要擁有自己的標籤,,,,,彷彿回到了哲學本源,我究竟是誰,我叫張進,而張進又是誰呢????

如果一直定義下去,還有**指標,四級指標,五級指標。。。。。

下面再給三個例子來證明&作為引用符的用處,還是那句話

和型別在一起的是引用,和變數在一起的是取址

型別一:

void

change

(int

* p)

intmain()

//此時a值會從1變為233

型別二:

void

change

(int

* p)

intmain()

//此時a值會從1變為233

型別三:

void

change

(int

*&p)

intmain()

//此時a值會從1變為233

C語言隨記 指標運用

下面是一列宣告 int p 返回值為int的函式 int p 3 int型陣列 int p 返回值為 乙個int型指標的指標 的函式 int p 返回值為int的函式指標 int p 6 指向 int型陣列 的指標 陣列指標 int p 返回值為 int型指標 的函式 int p 6 指向 返回值為...

指標的指標位址運用

以下 輸出什麼 1 2 3 4 5 6 main int p int a 1 printf d p 1 正確答案 c 1 2 5 出現錯誤 選擇c,a表示乙個指向大小為5陣列的指標,那麼 a 1就是表示乙個指向大小為5的下乙個陣列的指標,也就是陣列a最後乙個元素的下乙個位置,那麼int p int ...

c語言 指標的運用與表示

指標 1.定義 基型別 指標變數名 2.賦值 int a int pa a int a,pa a int p2 p2 a 兩個運算子 取位址 後面運算元必須是變數 利用指標訪問 引用 陣列 通過下標遍歷陣列元素 int a a表示的是陣列首元素的位址,是乙個位址常量,不能改變,等價 a 0 int ...