printf
("%d"
,*p++);
//注意此處是先進行後面的運算p++;
printf
("%d",*
++p)
;printf
("%d\n"
,p[i]);
//此時指標就相當於陣列名
printf
("%-2d",(
*p)++);
//如果陣列是a[6]= ,
則應該列印
printf
("%-2d"
,a[0]++
);//與上結果`
1 a 是陣列首元素的位址,所以 a 的值和&a[
0]的值相同,
另一方面,a[
0]本身是 包含 4 個整數的陣列,因此,a[0
]的值同其首元素的位址&a[0]
[0]相同。簡單的 講,a[0
]是乙個整數大小物件的位址,而 a 是 4 個整數大小
物件的位址。因為整 數和 4 個整數組成的陣列開始於同
乙個位址,因此 a 和 a[
0]的值是相同的。
2, a 所指的物件大小是 4 個 int
,而 a[
0]所指的物件大小乙個 int
,因此,a+
1 和 a[0]
+1 的結果是不同的。
3,二維陣列名解引用,降維為一維陣列名。 *
(a+1
)<
> a[1]
4, 一維陣列名,對其引用,公升級為二維陣列名。 &a[1]
<
>
(a+1
) 、5, &引用和*解引用互為逆向關係。 此上的說法,不是很嚴緊,但是限於我們的知識面,當下是可以這樣理解的。
printf
("%d",*
(*(arr+2)
+1))
;//*arr->arr[0]相當於降 維 *(*(arr+2)+1)->arr[2][1]
printf
("%d"
,arr[2]
[1])
;//a[n]===*(a+n)`相同
1,指標就相當於位址常量
2,陣列名就相當於一維指標,陣列名又相當於首陣列的位址
#include
intmain
(void);
printf
("arr[0]=%p arr[1]=%p arr[2]=%p\n"
,arr[0]
,arr[1]
,arr[2]
);//一次跳動四個int
printf
("*****===\n");
printf
("arr=%p arr+1=%p arr+2=%p\n"
,arr,arr+
1,arr+2)
;printf
("*****===\n");
printf
("*arr=%p *arr+1=%p *arr+2=%p\n"
,*arr,
*arr+1,
*arr+2)
;//解引用,相當於降維,一次跳乙個int
printf
("*****===\n");
printf
("arr=%p arr+1=%p arr+2=%p\n"
,&arr[0]
,&arr[0]
+1,&arr[0]
+2);
/* arr[i][j ]
(arr+i)第i行的位址
*(arr+i)第i行第0列的位址
*(arr+i) +j第 i行第j列的位址
*(*(arr+i) +j)第i行第j列的 內容
*/}``![在這裡插入描述]
陣列和指標的一些理解
指標和陣列 一直好讀書不求甚解,本人用了6年以上的c語言,才真正對指標和陣列有些了解。指標和陣列是一樣?int a 5 int p a sizeof p 4 而 sizeof a 20 為什麼?int a 5 extern int a 或者int p null extern int p 是否可以這樣...
關於陣列和指標的一些理解
int a 3 int b a cout b 了解了上述原理後,我們來看看下面這種情況。陣列建立的方式有兩種。第一種 int arr new int 2 cout arr 第二種情況 int arr cout arr 第乙個輸出,接受引數是乙個陣列,隱式轉換成陣列首位址。第二個輸出 arr,這得到的...
c指標的一些理解
c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左...