2010年4月19日 星期一

C語言的字串與指標

C語言的字串是字元陣列,實際上沒有字串這種資料型態。
在C語言裡,你可以用””雙引號括住一個以上的任意字元來代表字串,如果只是要顯示,則可以直接printf就可以。但若是要儲存成變數供後續使用,只有兩種方式:(1)字元陣列;(2)指標。

(1)字元陣列
char str1[20]=”這是一個字串”;
上述語法宣告一個str1的字元陣列變數,內容為”這是一個字串”,變數實際佔用記憶體空間為20byte。
(2)指標
char *str2=”這是一個字串”;
上述語法宣告一個str2的字元指標變數,內容是”這是一個字串”所在的記憶體位址,實際佔用記憶體空間為4byte。因為是字元指標,所以儲存的是另一個存在變數的記憶體位址,所以無論字串內容是什麼、有多少字元,指向它的指標變數只需要4byte(32bits)的記憶體空間。底下是做出這個實驗的程式碼:
#include <stdlib.h>
#include <stdio.h>
int main()
{
    char str[12]="這是一個字";
    char *str2="這是一個字,我說的沒錯吧";
    printf("變數\t內 容\t\t大小\n");
    printf("str\t");
    printf("%24s\t",str);
    printf("[%d]\n",sizeof(str));
    printf("str2\t");
    printf("%24s\t",str2);
    printf("[%d]\n",sizeof(str2));
    system("pause");
    return 0; 
}

心得
(1)指標必須依靠另一個變數的存在才有意義。所以當使用字元指標來使用字串時,實際上這個用雙引號括起來的字串已儲存在記憶體的某個空間中。
(2)相同的情況應該也存在使用字元陣列來儲存字串的時候。
(3)綜合(1)(2)點,我們可以得知,使用指標所省下的記憶體空間,實際上是被宣告變數的大小,而被指定的字串空間仍是無法省下。

沒有留言:

張貼留言