首頁>Club>
9
回覆列表
  • 1 # 小花貓

    在C中定義字串有下列幾種形式:字串常量,char陣列,char指標

    1.字串常量

    即:位於一對雙括號中的任何字元。雙引號裡的字元加上編譯器自動提供的結束標誌\0字元,作為

    一個字串儲存在記憶體中。如:printf("%s","hello"); //"hello"

    如果字串文字中間沒有間隔或間隔的是空格符,ANSI C 會將其串聯起來。例:

    char greeting[50] = "hello,and" "how are" "you";

    等價於:

    char greeting[50] = "hello,and how are you";

    字串常量屬於靜態儲存類。靜態儲存是指如果在一個函式中使用字串常量,即使是多次呼叫了這個函式,

    該字串在程式的整個執行過程中只儲存一份。整個引號的內容作為指向該字串儲存位置的指標。這一點與

    把陣列名作為指向陣列儲存位置的指標類似。

    2.字串陣列及其初始化

    初始化例子:

    char m[40] = "hello,world"; //定義字串陣列時必須指定陣列大小(整型常量),在指定大小時,要確保陣列的大小比預定的大一個,因為編譯器會自動新增'\0'。

    //多餘的元素會初始化為'\0'

    char m={'h','e','l','\0'}; //注意標誌結束的空字元,若沒有它,得到的只是一個字元陣列而不是字串

    3.利用char指標定義字串

    char *m = "hello,world"; //自動新增'\0'

    注意:此時字串指標m指向字串常量,不成用*(m+1)='o'修改此常量,因為這個字串常量放在常量區不能被修改

    4.陣列和指標

    陣列形式和指標形式有什麼不同呢?

    陣列形式: char m[40] = "hello,world";

    指標形式: char *m = "hello,world";

    陣列形式:

    編譯器會把陣列名m看作是陣列首元素的地址&m[0]的同義詞,m是個地址常量。可以用m+1來標識數組裡的下一個元素,但不能使用++m,增量運算子只能在變數前使用, 而不能在常量前使用。

    m[40]在計算機記憶體中被分配一個有40個元素的陣列(其中每個元素對應一個字元,還有一個附加的元素對應結束的空字元'\0')。每個元素都被初始化為相應的字元。

    通常,被引用的字串儲存在可執行檔案的資料段部分;當程式被載入到記憶體中時,字串也被載入到記憶體中,把被引用的字串複製到陣列中

    指標形式:

    指標形式(*m)也會在靜態儲存區為字串預留空間。此外,一旦程式開始執行,還要為指標變數m另外預留一個儲存位置,以在該指標變數中能夠儲存字串的地址。

    m指向字串的第一個字元,可用++m指向第二個字元。 指標m是個變數

  • 中秋節和大豐收的關聯?
  • “欲取鳴琴彈,恨無知音賞”這句詩是什麼意思急?