2008年6月3日

c語言-pointer(3)-指數與陣列(含字串陣列)

陣列可以看成指標的分身。不同的是,陣列的固定長度的記憶体區塊,而指標是一個變數。
舉一個簡單的例子:
int a[3]={5,7,9};
在指標上(要記):
1、值方面:
*a=5
*(a+1)=7
*(a+2)=9
2、位址方面:
a=&a[1]
a+1=&a[2]
a+2=&a[3]
_____________________
字串陣列:(複習一下,文字之後最後一格是存 \0 )
字串陣列多多少少有浪費空間的情形發生,但若是利用指標陣列來解決,嘿嘿~~那就可以達到用就占,不用就不占的完美境界了。
宣告的方式:
一維指標陣列的宣告格式:
型態*陣列名稱[個數];
舉個例子就是:
char *name[3]={"david","jane wang","tom lee"};
舉一個程式:
/*指標陣列*/
#include
int main(void)
{
int i;
char *name[3]={"david","jane wang","tom lee"};

for(i=0;i<3;i++)
printf("name[%d]=%s\n",i,name[i]);
return 0;
}
_________________________________
二維陣列
舉一個例子,宣告一個int num[3][3],二維陣列可以視為多個一維陣列。
int num[3][3]
1 2 3
4 5 6
7 8 9
可以看成:
num[0]→1 2 3
num[1]→4 5 6
num[2]→7 8 9

num={{1,2,3},{4,5,6},{7,8,9}};

就列而言:
num+0代表第一列第一個的位址。
num+1代表第二列第一個的位址。
num+2代表第三列第一個的位址。

就行而言:
無代表

所以要表達第幾列第幾行時的"位址",為以下三種表達:
num+0 *(num)+1 *(num)+2
num+1 *(num+1)+1 *(num+1)+2
num+2 *(num+2)+1 *(num+2)+2
or
num+0 *(num+0)+1 *(num+0)+2
num+1 *(num+1)+1 *(num+1)+2
num+2 *(num+2)+1 *(num+2)+2
or
*(num+0)+0 *(num+0)+1 *(num+0)+2
*(num+1)+0 *(num+1)+1 *(num+1)+2
*(num+2)+0 *(num+2)+1 *(num+2)+2
值得注意的是num+1+1=num+2

若要表達其"值" 的話則為:
*(*(num+0)+0) *(*(num+0)+1) *(*(num+0)+2)
*(*(num+1)+0) *(*(num+1)+1) *(*(num+1)+2)
*(*(num+2)+0) *(*(num+2)+1) *(*(num+2)+2)

沒有留言: