關於C 指標學習感想

2021-06-20 15:31:33 字數 1517 閱讀 7294

上學期尾聲時學習的指標困擾了我們大部分人,有好多內容我現在依然百思不得其解,所以我在網上找了部分指標的的教學者所講的心得,幫助大家理解指標以便更好展開學習。 

0. 一般人覺得指標難學因為在學指標前還沒把表示式和變數的概念搞清楚。

1. 指標變數儲存的是記憶體位址。用指標訪問資料也稱為間接定址。類似於你找乙個人,他住在「第一大院」。你直接去找第一大院就是直接定址。如果他的住址只有乙個住在「第五大院」的人知道,你去第五大院問出他家在第一大院這就是間接定址。

1.+ 對於上面這種情況,如果我們認為第五大院是「知道他家住址的那個人的住址」,我們就可以進行一連串的間接定址。另一方面也說明指標變數儲存的位址也是資料的一種。

2. 指標變數的型別。指標變數的型別目的*僅僅*在於減少程式設計中可能發生的錯誤。這一點必須明確。根本上說指標變數的型別就是位址。我們為了避免不必要的錯誤強行加上了「只能儲存整數的位址」之類的約束。好比住在第五大院的人只會去記中年人的位址。

3. 指標的操作。

3.0 宣告:型別a的指標的型別寫作 型別a* 比如int*。與此同時int*本身也是型別,我們可以寫int**。就是int的指標的指標。

3.1 獲取位址,對於記憶體變數表示式 &運算子可以獲得其位址,型別是表達是型別的指標。比如對於變數int a。&a獲得的就是型別是int *的a的位址。

3.2 重定向,對於指標變數或者指標變數表示式。*運算子可以獲得其指向位址的變數,型別是原指標的上一級。對於int a; int* p = &a; *p等價於a,型別是int。因為*p是變數,我們可以進行x = *p(取值)和*p = 0(賦值)操作。

3.3 &和*都可以對變數表示式進行操作。比如陣列int a[10]。我們可以通過&a[5]獲得a第5個元素的位址。又如int** a。*a是乙個int*型別的變數,我們可以進一步地**a獲得型別是int的變數,這就是從第六大院的人口中問出知道a君住址的人在第五大院,然後再去第五大院問出a君住在第一大院的過程。

4. 陣列和指標的混合。這個可以說是c/c++語法的bug...

int* a[4] 這個型別可以看成(int*)[4] 元素是int*型別,有4個元素

int (*a)[4] 這個其實是(int[4])* 指向int[4]型別變數的指標。

4.+ 陣列變數其實也是指標。int b[4]; 變數b在多數情況下就是乙個const int*,指向陣列b所占用的記憶體,也就是陣列b的第乙個元素。*b和b[0]是等價的。對於int *a;我們可以直接進行a = b的操作,讓指向陣列b。

5. 指標的加法。對於int *a;我們可以進行a + n, a - n的運算。a + 1指向a指向的元素的下乙個元素,相應的a - 1指向上乙個元素,以此類推。於是*(a + 1)就對a指向的下乙個元素進行重定向,等價於陣列運算a[1]。

5.+ 對於int *a, *b; a - b獲得的是b到a之間相差多少個元素,型別是int。比如 int x[5]; int *a = &x[0], *b = &x[3]; b - a的結果是3。相應的a - b的結果是-3。

這些大體概括了指標的基本內容,可能有疏漏,指標的應用就是指標的基本操作和其他表示式、變數操作的配合。 

關於c 感想

在學校開展了c 的課程,但是不得不說相當乏味。原因很簡單 1.感覺c 很高階,自己就這智商怎麼學的會哦,自己給了自己門檻。2.c 很難快速的做出乙個能夠展現的專案,缺乏成就感。3.可能當時緣分不夠。這使得我和c 擦身而過,現在想看下c c 水平大概不如初學者,畢竟不是我的主要開發語言。工作後,我是如...

《征服C指標》試讀感想

其實起初看到這本書不是在這裡,而是在以為同學那裡,當時由於時間限制,而且看了看內容,是一種 b 近乎於吐槽的語言方 b 式,覺得可能有點兒虛,拿起來翻了翻就扔給他了。但是這個名字 征服c指標 起的,實在是讓我有看一看的衝動,所以就上網搜了一下 企圖能夠有個電子版啥的 oops 結果卻發現了一些這本書...

關於C 指標

一.怎樣給多維陣列動態分配記憶體 allocate int p new int m for int i 0 i m i p i new int n use for int i 0 i m i for int j 0 j n j p i j i j free for int i 0 i m i del...