什麼是指針?什麼是數組?指針和數組的關係?數組
形象地講,咱們能夠把計算機的內存看做一條長街上的一排房屋,每一個房間均可以容納數據並經過一個房號來表識。而表示每一個房間房號的值咱們能夠稱爲地址。或許這樣的比喻有侷限性,畢竟真實地計算機內存是以數以萬計的bit位組成。ide
⑴初始化: 指針
①最簡單的以 int *p 爲例,初始化時內存裏開闢了四個字節的空間。內存
▇▇▇▇it
②另外一個聲明 ,如今,咱們有兩個變量,下圖中顯示了後面那個未知內容的內存。table
char ch = 'a';class
char cp = &a;變量
▇→▇▓←(?)引用
↗ ↖數據
(cp) (ch)
⑵「*」的用法
① 定義指針變量是
② 對指針變量進行節引用是
★注意1:若要實現地址的移動,是p++,而不是*p++
★注意2:
int *p = NULL; //表明建立一個指針變量,並對它進行初始化。
*p = NULL; //將訪問到的內容改成NULL。
★注意3:對於數組int a[4],&a與a的區別是什麼呢?&a與a的內容同樣,但&a+1增長了16個字節,而a+1增長了一個字節。緣由是&a是整個數組的地址,而a是數組首元素的地址。
以下表格能夠讓咱們深入地理解指針與數組的區別
a[]={1,2,3,4} | char name[]="abcdef" | char *name="abcdef" |
sizeof(a)=16 | sizeof(name[0])=1 | sizeof(&name)=4 |
sizeof(&a)=16 | sizeof(&name)=4 | sizeof(*name)=1 |
sizeof(a+0)=4 |
sizeof(*name)=1 | sizeof(&name+1)=4 |
=4sizeof(*a)=4 | sizeof(&name+1)=4 | sizeof(name)=4 |
sizeof(a+1)=4 | sizeof(name+1)=4 | sizeof(name+1)=4 |
sizeof(&a)=4 | sizeof(name)=7 | strlen(name)=6 |
sizeof(&a[0])=4 | strlen(&name)=6 | strlen(&name)=6 |
sizeof(&a[0]+1)=4 | strlen(&name+1)=12 | strlen(&name+1)=隨機值 |
指針數組與數組指針的區別
指針數組:用於存儲指針的數組,即數組元素都是指針。
數組指針:指向數組的指針。
表達式 | 類型 |
表示 | 元素表示 |
int a[4] |
整型數組 | 含有4個元素的整型數組 | a[i] |
int *a[4] | 數組指針 | a中元素爲int型指針 | *a[i]或*(a[i]) |
int (*a)[4] | 數組指針 | 指向數組a的指針 | (*a)[i] |
▲int *: 一次訪問四個字節.
▲char *: 一次訪問一個字節.