在經過階段一的linux學習之后,我來到了階段二的Linux下的C語言編程,雖然學到目前linux下的C語言似乎跟之前學的C語言所差無幾,但是按照老師的話來說,C語言指針這塊尤為重要,而我在這一方面的學習也不夠透徹,本文就寫寫C語言中數組與指針的關系與一些使用的例子。
按照林世霖老師的說法,數組和指針的存儲機制是一樣的,只是存放的東西不同。所以我就按照老師的思路寫。       如果按照種菜來舉例,數組和指針只是種的菜不同。一個是放數據(int float…),一個放地址。下面舉三個例子說明他們的存儲。       例1:       int a[3] ;       挖三個坑(申請三塊內存)緊挨著的,里面存放int類型的數據。       
       例2:       int b[2][3]; 可看成  int (b[2]) [3]        先挖兩個坑,一個坑存放三個int型數據。 
     例3:     int  *p[3] []優先級更高      所以先申請三塊內存,存放地址 
       總結:里面放什么取決于第二部分
繼續舉例子 一、 Int a; Int *p; 指針放地址 ; 把a的地址賦給p p=&a; p等于a的地址 于是p也可以間接使用a *p則是a的值 即 =a; 二、 int *(*q); 也是跟之前的一樣 ,先申請一塊內存 然后第二步,存放的東西是什么 是一個指針的地址 如果要放 int a 的地址 ,那就是錯的 放int *p的地址 ,那就可以,很合適 三、 int *k[3] 等于 int (*k)[3] *k第一部分 申請一塊內存 放地址 放int a[3]的地址 k=&a;
當然,指針也可以指向函數 。 例: int func(char a); int (*p)(char a); p=&func;
比如我一開始定義了 int a[] ={1,3,4,5}; 我希望他全部打印出來,但是我又不清楚他有多少個。 這時候就要使用 for(i=0;isizeof(a)/sizeof(a[0];i++) { … } 也稱為自適應。
int a1 [3]={1,2,3); int a2 [3]={4,5,6); a1=a2; 這條語句是錯誤的 ! 任何數組都不能直接賦值。 但是我們至少有兩種方法可以賦值 一種是一個一個來 。比如a1[0]=a2[0]; 第二種是使用memcpy函數 memcpy(a1,a2,sizeof(a2));這句話是將a2正塊內存復制到a1
char s1[10]={‘a’,’b’,’c’}; char s2[10]={“abc”}; char s3[10]=”abc”; char s4[10]={‘a’,’b’,’c’,’/0’}; 注意了,s2等于s3,s1不等于s2 ,因為s2和s3有‘/0’ ,s2等于s4 。 還有 char s5[3]=”abc”; 是越界!!
int a[3]
1,直接用數組取址,代表整個數組的地址,&a 2,數組名代表其首元素的地址 a ==》&a[0] 3,這張圖說明了數組地址存放
 4,調用函數把數組作為實參,實際上是指針的使用 傳首元素的地址,這里不詳細講解。 

1指針的大小固定為四個字節。 2數組的剛開始的地址稱為基地址。 3coast的使用
第一行和第二行效果相同 
新聞熱點
疑難解答