keil5指標指向陣列除錯小結

2021-10-23 15:20:46 字數 893 閱讀 5422

學習:c語言無法正確傳引數的原因是什麼?因為分不清b[10]是陣列還是陣列中乙個具體的值。要怎麼樣傳陣列引數才是正確的?

1函式引數形參實際上都是指標變數int*p等效為int p

2將陣列名作為實參傳入即可,陣列名實際上是指標變數,如傳入a

1.&取位址運算子,s是取位址所指向的物件。

2.把記憶體具體化,一邊是位址,一邊是儲存的物件

3.指標變數預設值就是乙個位址,位址只能和位址進行運算,指標變數本身是位址,然後&指標變數取出對應的位址。位址和值之間需要做乙個轉換。不經過轉換的話,位址永遠只是位址,如2203567890

4.陣列本身就是乙個位址,a[10],a本身在系統中是個位址

5.陣列名是可以作為函式引數的,但是return無法返回陣列,只能返回指標或者確定的值。傳參的時候實際上傳入的是個指標。

6.形參是個指標變數,實參只能是具體的指標或者確定的值。陣列形參不帶的話,系統怎麼知道是個陣列?這樣的話實際上,p和p在系統裡是沒有區別的。實參傳入陣列時,實際上傳入的是個確定的值,如random(a[2]),傳入的是a[2]的值

7.拿個具體的數值來給指標變數算值比較容易理解。記住乙個等價公式進行換算,定義之外,p = a[0]等價。(p+1)=a[1],((p+1)) = a[1][0]數值等價。((p+1)+i) = a[1][i]數值等價

8.臨時變數在指標的作用域是有可能在watch中看不到的,由於變化比較短暫。不是keil5優化的問題,就是看不到

9.定義乙個指標指向這個陣列,然後把指標拖到memory裡面看,區域性變數是看不到的,除非你定義為區域性第四個之後的變數,因為前四個會載入到暫存器裡面~。指標指向的陣列可以從keil5中memory中檢視

10.keil5 區域性指標指向的陣列只能在memory中檢視,watch中檢視不了。想在watch中檢視就轉換為全域性變數。

指標(三) 指標陣列

指標陣列定義 一維指標陣列的定義形式 型別名 陣列名 陣列長度 char p 5 乙個陣列,若其元素均為指標型別資料,稱為指標陣列,指標陣列中的每乙個元素都相當於乙個指標變數。指標陣列的初始化 使用位址為指標陣列初始化 char p 5 指標陣列和二級指標 int main char temp 定義...

指標(2)指標陣列 陣列指標 陣列指標陣列

都說指標是c語言的精華所在。今天繼續對指標的探索!指標下一 指標陣列 陣列指標 指標陣列 是存放指標的陣列。如 int p 5 該陣列長度為5,存放的是指向整型變數的指標。陣列指標 是乙個指向陣列的指標。如 int p 5 這是乙個指向長度為5的整型陣列的指標。1.陣列指標在一維陣列中的應用 int...

5 指標與函式

c語言中值傳遞的本質是,當呼叫被調函式時,被調函式會在自己的函式棧中開闢相同型別的形參空間,並且將傳遞過來的值寫入形參空間儲存。傳遞位址和普通傳參沒有本質的區別。傳遞位址和普通傳參都是值傳遞,實參是數值,也可以是變數。數值沒有普通值傳遞,因為普通值傳遞需要的形參空間大,效率低,所以只有位址傳遞。四種...