C語言中指標的深入學習之指標與陣列之間的恩怨

2021-08-29 23:33:38 字數 645 閱讀 5850

注意此處是建立在定義int a[5] 的基礎上;此處的a不是字元;

分析下邊**:

main()

; int *ptr = (int *)(&a+1)

printf("%d,%d\n",*(a+1))

}

千萬別以為上邊**十分簡單,其實不然,最後終端上列印出來的值到底是多少那?

對上題來說,a是乙個一維陣列,陣列中有五個元素;ptr是乙個int型別的指標,並指向此陣列;

&a+1 :取陣列a的首位址,該位址的值加上sizeof(a),即&a+5*sizeof(int),也就是下乙個陣列的首位址,顯然當前指標已經越過了陣列的界限。

**(a+1)*:a,&a的值是一樣的,但是意思並不一樣,a是陣列首個元素的首位址,也就是a[0]的位址,&a是陣列的首位址,a+1是陣列下乙個元素的首位址,即a[1]的位址,&a+1是下乙個陣列的首位址,可以理解為ptr指的是a[5],雖然沒有第6個元素,但是可以這麼理解;

所以上邊題的答案是2,5;

a與&a雖然值相同,但是本質不同,尤其是在進行位址加假的時候,最容易混淆;

宣告,這裡的學習是通過《c語言深度解剖》了解到的

C語言深入學習之指標

一 指標是什麼?c語言裡,變數都是存放在記憶體裡,而記憶體其實就是一組有序位元組組成的陣列,每個位元組都有唯一的記憶體位址。cpu 通過記憶體定址對儲存在記憶體中的某個指定資料物件的位址進行定位。這裡,資料物件是指儲存在記憶體中的乙個指定資料型別的數值或字串,它們都有乙個自己的位址,而指標便是儲存這...

C語言中指標陣列與陣列指標

1 指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。2 陣列指標的實質是乙個指標,這個指標指向的是乙個陣列。1 int p 5 int p 5 int p 5 2 一般規律 int p p是乙個指標 int p 5 p是乙個陣列 3 如果核心和 結合,表示核心是指標 如果核心和 結合,...

C語言中指標大全

1.使用二維字串儲存字串的時候會出現儲存浪費的情況,使用指標陣列儲存則不會 char s for i 0 ifor i 0 i 3 i 2.指標陣列作為函式引數傳遞多個字串給另乙個函式。指標陣列是乙個陣列,只是裡面存放了指標 void str sort char s,int n n代表指標陣列的長度...