下面這段程式反映了C語言處理字元數組和字元指針的記憶體配置設定的方式:
- #include<stdio.h>
- #include<stdlib.h>
- void main()
- {
- char *b ="qwerty"; //定義一個字元類型的指針,用一個字元串初始化,這時b儲存的是此字元串第一個字元的位址
- printf("b=\t%s\n",b); //輸出從指針b開始的一個字元串(%s)
- printf("*b=\t%c\n",*b); //輸出字元指針b所指向的位址裡儲存的字元(%c)
- printf("b[2]=\t%c\n",b[2]); //輸出從b所指向的位址開始數的第三個字元
- //b[2] = 'a'; //錯誤,b是字元指針,隻能進行指派,不能直接修改之後的元素
- char a[] = "abcde"; //定義一個字元數組,a此時儲存的是這個字元數組的以一個元素在記憶體中的位址
- b = a; //b獲得了a的值,也指向了字元數組
- b[0] = 'y'; //此時可以直接指派,因為b指向了數組
- //b[7] = 'a'; //此修改編譯時不會報錯,但運作時卻會造成數組越界
- printf("a[]=\t%s\n", a); //輸出數組a的值,因為a和b指向了同一段記憶體位址,是以上一句對b的修改也是對a的修改
- printf("a[5]=\t%d\n", a[5]);//輸出字元串最後的結束标志"\0"
- b[2] = 0; //将第三個字元替換成‘0’,會把字元串截斷,導緻輸出不完整
- printf("b=\t%s\n", b); //輸出會隻有前兩個字元
- system("pause"); //VS中讓指令行視窗暫停
- }
輸出:
b= qwerty
*b= q
b[2]= e
a[]= ybcde
a[5]= 0
b= yb
請按任意鍵繼續. . .