天天看點

數組指針與數組

數組指針定義:指向數組的指針,比如int a[3][3],他的數組指針可以是int (*p)[3]

指針數組定義:由指針構成的數組,比如int *p[3],表示由3個int*類型構成的數組。

對于數組指針,了解數組指針對我們了解取出數組的元素會更加深刻。

對于一維數組,我們知道int a[3],int*p=a;p是int*類型的,同時數組名出現在表達式中,會轉化成指向第一個元素的位址,這樣a也是int*類型的,那*a就是把a所在位址的數取出。

那在二維數組是不是這樣呢?

數組指針與數組

a+1比a列印多12,通過觀察我們猜測這個位址應該是元素4的位址。但是我們在使用*時發現列印了一些亂七八糟的數,這是什麼?

首先a是ine(*)[3]類型,那解引用就應該是**,首先*把int(*)[3]改成int[3],然後*就可以取出int[3]的值了,我們試試看。

數組指針與數組

這樣好像就可以了。然後我們通過觀察,會發現**(a+1)就是a[1][0],而*(*a+1)就是

a[0][1]。

對于多元數組,是不是也是這樣呢?

數組指針與數組

可以看出,***a對應的是a[0][0][0],***(a+1)對應的是a[1][0][0],

**(*a+1)對應的是a[0][1][0],*(**a+1)對應的是a[0][0][1]。

數組指針與數組

我們使用循環就可以把數組的元素一次列印出來(注意for的對應)

接下來我們使用數組指針:

數組指針與數組

好像就是a[i]=*(a+i)這個意思。

由此得出一個概念:數組名出現在表達式中,會退化成下一級的數組指針類型。

int a[3][3],a是(*)[3]類型;int a[3][3][3],a是int(*)[3][3]類型。

數組指針與數組

說白了,這篇文章就是讓你明白兩個問題:

1.數組名出現在表達式中,代表什麼意思?

2.數組名類型時怎麼樣的,或者說用數組指針如何表示?

如有不對,歡迎指正。​