陣列名,陣列首位址,a, a, a 0

2021-06-18 17:35:30 字數 2177 閱讀 6038

(1)指標陣列: 是陣列,但陣列中的每個元素都是指標

int *p[5];//如p[2]是指標,可*p[ 2]=3;

(2)指向陣列的指標: 是個指標,但它指向的是乙個陣列

int a[5];

int (*p)[5];//與前一行比較,*p相當於a,即p=&a;就像:int m;int *pm;//*pm就相當於m.pm=&m;

p= &a;//可與前一行合併為int (*p)[5]=&a;

----------------------

a代表這個陣列,它是乙個指標,指向第乙個元素

這裡一定要記住,a是陣列名,&a代表的不是取a這個變數的位址,而是取陣列元素的位址

---------------------------------------

a     的型別是 int[5]       陣列

&a    的型別是 int(*)[5]    指標——指向int[5]陣列的指標

&a[0] 的型別是 int *         指標——指向int型別的指標。

sizeof(a)=20;

sizeof(*a)=4; 因為有取值符*,表示把a當成乙個指標(int*),而a指向陣列的首位址,

即a=&(a[0]),即sizeof(*a)=sizeof(*&(a[0]))=sizeof(a[0])=sizeof(int)=4。

sizeof(*&a)=20;//因為p=&a,所以=sizeof(*p),而*p=a,所以=sizeof(a)=20;

---------------------------------------

int a[5]=;

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

printf("%d,%d",*(a+1),*(ptr-1));//輸出:2,5

指標加1要根據指標型別加上一定的值,不同型別的指標+1之後增加的大小不同,指標只是乙個記憶體位址,但指標指向位址的長度可能不同,如char *pc與int *pi,sizeof(pc)=sizeof(pi)=4,但為什麼輸出時,cout<

對**中的&a+1,&a是陣列指標,其型別為int (*)[5],因為p=&a,也即是p的型別.所以&a+1=&a+sizeof(a),其中a為int[5]:(把a=int[5]代入a* p,即相當於int(*p)[5]).所以&a+1=&a的位址值+5*4位元組,即變為陣列a的結束位址的下乙個位址(即&a[5]),&a+1仍是int (*)[5]型別,經(int *)(&a+1)強制轉化為int*,賦值給ptr.後面的ptr-1=ptr-sizeof(int)=ptr的位址值-4個位元組,即變為陣列a的最後乙個元素的位址&a[4],*(ptr-1)即為a[4],故輸出為5.

而a+1=a+sizeof(int):(此處a退化為int*,故對於a* p,a為int)=a的位址值+4個位元組,即是&a[1],則*(a+1)即a[1],故輸出2.

又如:double t= ;

double *pt= &t[3];//指向值為111

int *ptint= reinterpret_cast< int * > (pt);

char *ptch= reinterpret_cast< char * > (pt);

cout<< *( pt- 1)<< "\t"<< *(reinterpret_cast(ptint-2))<

*(reinterpret_cast(ptch-8));//最後輸出結果全為578

---------------------

void fun( int *p)與void fun( int p)是一樣的,即函式列表中的陣列此時退化成了指標

補充:

假設double a[5] = ;

從很明顯看到a是個陣列!

&a 是指向有5個double元素的陣列的指標!

&a+1後,記憶體位址增了40(5*8 = 40)

*&a仍然是個陣列。

從這裡看出, a和一起的時候是個陣列, a[0]表示取陣列a的第乙個元素。

a和+一起退化為 指標, a+1 是(double *)型別,並且比 a+0 的值增加了8位元組(0x22abc0 - 0x22abb8 = 0x08)。

陣列名,陣列首位址,a, a, a 0

1 指標陣列 是陣列,但陣列中的每個元素都是指標 int p 5 如p 2 是指標,可 p 2 3 2 指向陣列的指標 是個指標,但它指向的是乙個陣列 int a 5 int p 5 與前一行比較,p相當於a,即p a 就像 int m int pm pm就相當於m.pm m p a 可與前一行合併...

陣列 陣列名 陣列位址

這裡取出的是整個陣列的位址。計算的是整個陣列的大小,單位是位元組。除此之外,遇到的所有的陣列名都表示陣列首元素的位址!一維陣列 int a printf d n sizeof a 16 這裡的陣列名a表示整個陣列,計算整個陣列的大小,也就是4個整數,整型佔4個位元組,所以整個陣列的大小是4 4 16...

陣列 陣列名 陣列位址學習

先來看乙個例子,然後通過分析例子來學習 include int a 3 int main 結果 a 0x555e35977010 a 0x555e35977010 a 1 0x555e35977014 a 1 0x555e3597701c我們來逐個分析 1.陣列名的值是個指標常量,指向陣列的第乙個元...