陣列指標就是指向陣列的指標,相當於是乙個二維陣列,先看乙個例子:
int a[2][2]=; //這是乙個2*2的二維陣列
int (*p)[2]; //陣列指標
p=a; //令p指向陣列a
記憶體位址1
0x0012ff38
20x0012ff3c
30x0012ff40
40x0012ff44
則a和p中各元素的值如下:名字值
a0x0012ff38
a[0]
0x0012ff38
a[1]
0x0012ff40
p0x0012ff38
p[0]
0x0012ff38
p[1]
0x0012ff38
&a[1][0]
0x0012ff40
&a[0][0]
0x0012ff38
p+10x0012ff40
a+10x0012ff40
a[0]+1
0x0012ff3c
a是乙個陣列名,型別是指向一維陣列的指標,不是變數,a的值是指標常量,即不能有a++或者a=p這些操作。a指向這塊連續空間的首位址,值是&a[0][0]。
a[0]是一維陣列名,型別是指向整型的指標,值是&a[0][0],這個值是乙個常量。
a[1]是一維陣列名,型別是指向整型的指標,值是&a[1][0],這個值是乙個常量。
p是乙個陣列指標變數,指向一維陣列的指標變數,值是&a[0][0]。可以執行p++;p=a等操作。
a+1表示指向下一行元素,也可以理解為指向下乙個一維陣列。
*(a+1)是取出第一行的首位址。
a[0]+1是指向第0行第1個元素,也可以理解為指向一維陣列a[0]的第乙個元素。
p+1同a+1
(p+1)同(a+1)
雖然a跟a[0]值是一樣,但型別不一樣,表示的意義不一樣。通過分析就不難理解為什麼((a+i)+j)和a[i][j]等效了。
就和整型陣列是用來存放整數一樣,指標陣列是用來存放指標的陣列,看下面的例子:
int i=1,j=2; //p先跟結合,然後再跟*結合
int *p[2]; //指標陣列,存放指標的陣列
p[0]=&i;
p[1]=&j;
printf("%d",sizeof(p));
此例陣列p就兩個元素,p[0]是指向i的指標,p[1]是指向j的指標。這兩個指標都是int型指標,所以p是存放int型指標的陣列。sizeof(p)返回陣列占用的總空間,所以程式輸出是8 C語言複習筆記(三)
1 複習指標與陣列 參考2 選擇排序法講解 歸納 1 把0座標的元素與右邊最小的乙個元素交換,達到效果最小的放到0位置 2 把1座標的元素與右邊最小乙個元素交換,達到效果,第2小的放到1位置 3 把2座標的元素與右邊最小的乙個元素交換,達到效果,第3小的放到2位置 以此類推 3 氣泡排序 歸納 兩兩...
C語言複習(專公升本複習)
示例 inculdevoid mian 上面是乙個簡單的c語言程式下面就來介紹其中的各個關鍵點 c語言程式是由乙個或者多個函式構成,乙個c語言有若干條c語言語句構成 2.注 乙個c語言程式或是乙個資料夾中只能有乙個主函式 inculdevoid mian 1.inculde 標頭檔案 inculde...
c語言複習
記住,typedef是定義了一種型別的新別名,不同於巨集,它不是簡單的字串替換。比如 先定義 typedef char pstr 然後 int mystrcmp const pstr,const pstr const pstr實際上相當於const char 嗎?不是的,它實際上相當於char co...