什么是指针?什么是数组?指针和数组的关系?
什么是指針?什么是數(shù)組?指針和數(shù)組的關(guān)系?
? ? 形象地講,我們可以把計(jì)算機(jī)的內(nèi)存看作一條長街上的一排房屋,每個(gè)房間都可以容納數(shù)據(jù)并通過一個(gè)房號來表識。而表示每個(gè)房間房號的值我們可以稱為地址。或許這樣的比喻有局限性,畢竟真實(shí)地計(jì)算機(jī)內(nèi)存是以數(shù)以萬計(jì)的bit位組成。
? ? ?⑴初始化:?
????????①最簡單的以 int *p 為例,初始化時(shí)內(nèi)存里開辟了四個(gè)字節(jié)的空間。
? ? ? ? ? ? ? ? ?▇▇▇▇
????????②另一個(gè)聲明 ,現(xiàn)在,我們有兩個(gè)變量,下圖中顯示了后面那個(gè)未知內(nèi)容的內(nèi)存。
?????????????????????char ch = 'a';
?????????????????????char cp = &a;
? ? ? ? ? ? ? ? ▇→▇▓←(?)
? ? ? ? ? ? ??↗ ? ??↖
? ? ? ? ? ? (cp) ? ? ?(ch)?
???????⑵“*”的用法
????????????①?定義指針變量是
????????????② 對指針變量進(jìn)行節(jié)引用是
?★注意1:若要實(shí)現(xiàn)地址的移動,是p++,而不是*p++
?★注意2:
??????????????int *p = NULL; ? //代表創(chuàng)建一個(gè)指針變量,并對它進(jìn)行初始化。
? ? ? ? ? ? ? *p = NULL; ? ? ?//將訪問到的內(nèi)容改為NULL。
?★注意3:對于數(shù)組int a[4],&a與a的區(qū)別是什么呢?&a與a的內(nèi)容一樣,但&a+1增加了16個(gè)字節(jié),而a+1增加了一個(gè)字節(jié)。原因是&a是整個(gè)數(shù)組的地址,而a是數(shù)組首元素的地址。
如下表格可以讓我們深刻地理解指針與數(shù)組的區(qū)別
| 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)=隨機(jī)值 |
指針數(shù)組與數(shù)組指針的區(qū)別
指針數(shù)組:用于存儲指針的數(shù)組,即數(shù)組元素都是指針。
數(shù)組指針:指向數(shù)組的指針。
| 表達(dá)式 | 類型 | 表示 | 元素表示 |
| int a[4] | 整型數(shù)組 | 含有4個(gè)元素的整型數(shù)組 | a[i] |
| int *a[4] | 數(shù)組指針 | a中元素為int型指針 | *a[i]或*(a[i]) |
| int (*a)[4] | 數(shù)組指針 | 指向數(shù)組a的指針 | (*a)[i] |
▲int *: ?一次訪問四個(gè)字節(jié).
▲char *: 一次訪問一個(gè)字節(jié).
轉(zhuǎn)載于:https://blog.51cto.com/10798301/1720066
總結(jié)
以上是生活随笔為你收集整理的什么是指针?什么是数组?指针和数组的关系?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android监视返回键
- 下一篇: 纹理mag filter不能取GL_XX