1. 程式人生 > >2.1 C語言陣列與指標

2.1 C語言陣列與指標

指標和陣列
                const int *p;  int const *p;  int *const p;  const int *const p;
                常量指標       常量指標       指標常量       常量指標常量
                *p不變         *p不變         p不變          p和*p都不變
                
                char *p="abcdef";    p指標佔有4位元組,其字串儲存在靜態區
                char a[]="12345\0";    a陣列佔有7位元組,其字串儲存在棧上面
                    這樣定義即字串陣列,使字串結尾有'\0',
                    編譯器還是會在字串後面加上'\0'
                a = &a    但是意義不同
                a  代表a[0]元素的地址
                &a 代表 a 陣列的地址
                sizeof(a)=7   計算a陣列的大小
                sizeof(&a)=4    gcc中始終等於 4 (無論是什麼陣列)
                a+1  等於 a[1]的地址
                &a+1 等於 a[sizeof(a)+1]的地址
                
                指標和指標的減法運算有意義:間隔距離是多少個單位(基型別寬度)
                指標和整數的加減運算有意義:以基型別寬度為單位移動指標
                
                定義為陣列,宣告為指標;定義為指標,宣告為陣列,這兩種都是錯誤的.
                檔案1:
                    char a[100];        char *p= "abcdef";
                檔案2:
                    extern *a;            extern char p[];
                
                函式指標
                    (*(char**(*)(char**,char**))0)(char**,char**);
                    char *(*pf[3])(char *p);     函式指標陣列
                    char *(*(*pf)[3])(char *p);  函式指標陣列的指標