如何理解指針與數組的關系 隊列,堆棧與數組,鏈表的關系與區(qū)分?
隊列,堆棧與數組,鏈表的關系與區(qū)分?堆棧和隊列都可以用數組和鏈表來實現!廣義來說,棧也是隊列!兩者都是順序表結構!棧也叫FIFO隊列,也可以叫LIFO隊列,隊列也叫FIFO隊列!這兩個統(tǒng)稱為單輸入單輸
隊列,堆棧與數組,鏈表的關系與區(qū)分?
堆棧和隊列都可以用數組和鏈表來實現!廣義來說,棧也是隊列!兩者都是順序表結構!
棧也叫FIFO隊列,也可以叫LIFO隊列,隊列也叫FIFO隊列!這兩個統(tǒng)稱為單輸入單輸出隊列!
堆棧屬于單端隊列!隊列是單進單出的,d:堆棧(LIFO或FILO)、隊列(FIFO)和雙入雙出隊列(deque)是隊列的三種形式。Stack是單端隊列,先入后出!單輸入單輸出隊列的D
指針數組?
如果指針數組* str[5] { "jjjjj ", "kkhjfg ", "jkjgh ", "kjjjk "和 "llljg "}被使用,為什么這里的str[i]代表每個字符串,為什么可以作為函數參數?望指教!
可以調試一下看看:
命名變量str指向內存地址,該地址是指針數據的第一個地址;
str[0]的值是數組中第一個字符串的第一個地址;
str[1]的值是數組中第二個字符串的第一個地址;
您可以通過調試來查看這些命名變量的地址。
不看內存地址怎么理解指針?
指針的本質是一個地址的解釋!
Char*編譯器將A指向的地址解釋為字符。
假設A指向內存地址0x0001,地址0x0001存儲0x61 0x62 0x63。編譯器如何解釋*a?
編譯器會看到a的類型是char,也就是只看這個地址的1個字節(jié),所以編譯器解釋* a a.
指針類型是告訴編譯器如何解釋指針變量值所指向的地址。
一直沒明單片機C語言的指針這塊內容,在什么情況下會用到指針呢?
作為一個長期使用C語言的,我來回答一下C語言指針的問題。
首先,C語言指針的本質是什么?C語言指針的本質是內存變量,也就是內存單元的個數。存儲單元以字節(jié)為單位。所以指針是字節(jié)數。如下圖所示,一個4G內存的編號,指針的值其實就是內存編號。
其次,明確了變量和指針的關系對應的是具體的內存,變量的內容就是內存中存儲的數字。根據。
比如我們定義一個變量uint8_t a10,如果a的位置是0,也就是上圖中0的位置存儲在內存中的數據是10;
讓 讓我們再看看指針,定義指針uint8_t * ba。我們知道含義是取地址,那么根據上面假設變量A位于地址0,那么A就是0,指針變量B的值就是0。
如果你不 不理解指針定義uint8_t * ba,我們可以做一個改動:
(uint8_t *) b a,很容易理解(uint8_t *)是一種新的數據類型。事實上,在我們實際的編程中,通常將其定義為typeof uint8_t * uint8_p _ p。
uint8_p b
這樣,B更像一個變量,更容易理解。
第三,指針單元和內存指針。每個單元代表多少內存?這取決于指針的類型。
比如char * a,short int * b,int * c,long int * d等。
指針指的是每個內存的編號,有1字節(jié),2字節(jié),4字節(jié),8字節(jié),也就是每個變量類型占用的內存單元。
假設A、B、C、D四個指針的變量值都是100。自加后指針的值是多少?
a;
b;
c;
d;
你能猜出a,b,c,d的值是多少嗎?
答案是:101,102,104,108。
也就是指針每次移動對應一個變量類型的內存量,這個可以通過keil開發(fā)環(huán)境上的仿真環(huán)境來驗證,有興趣的可以自己驗證。
最后,指針的優(yōu)勢和應用場景:1。效率高;2.靈活,可以在任何位置訪問內存數據;3.作為函數參數,只需要傳遞4個字節(jié),比數組值傳遞節(jié)省內存復制時間。
應用場景:1。交換函數中兩個變量的值。
學習一個函數的時候,交換兩個數的值,做一個swap函數,傳入值,或者交換兩個值,沒問題,但是沒有swap就沒用了。為什么?因為傳入了兩個值。如果指針被傳遞就沒有問題。因為指針傳遞了兩個變量的地址,所以變量的位置保持不變。
2.該函數通過指針返回多個值。
3.函數返回操作的狀態(tài),結果通過指針返回。
…………
指針的缺點指針是C語言的靈魂。一般來說,C語言是a "低級 "語言,這也很大程度上是因為C語言指針的問題。c語言指針允許開發(fā)人員在任何內存位置訪問數據。這是其他聲音可以做到的。;無法實現。正是因為有了指針,C語言也容易出錯。最常見的問題是地址越界。如果地址越界,讀寫一些不該讀寫的東西會直接導致系統(tǒng)崩潰,這個問題很難定位,因為語法上是這樣的沒有編譯時檢測不到的錯誤。
如果對C語言的指針有什么意見,歡迎留言討論。