陣列指標一些理解

2021-10-03 08:34:00 字數 2149 閱讀 5535

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標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左...