數組的概念與指針的概念聯系非常解密。其實數組的標識相當于它的第一個元素的地址,就像一個指針相當于它所指向的第一個元素的地址,因此其實它們是同一個東西
int * p;
下面的賦值為合法的:
p = numbers;
這里指針p 和numbers 是等價的,它們有相同的屬性,唯一的不同是我們可以給指針p賦其它的數值,而numbers 總是指向被定義的20個整數組中的第一個。所以,p只是一個普通的指針變量,而與之不同,numbers 是一個指針常量(constant pointer),數組名的確是一個指針常量。因此雖然前面的賦值表達式是合法的,但下面的不是:
numbers = p;
因為numbers 是一個數組(指針常量),常量標識不可以被賦其它數值。
?
因此,我們可以用下面兩種方法的任何一種來初始化字符串mystring:
char mystring [ ] = "Hello";
在兩種情況下字符串或數組mystring都被定義為6個字符長(元素類型為字符char):組成Hello的5個字符加上最后的空字符('\0')。在第二種用雙引號的情況下,空字符('\0')是被自動加上的。
注意:同時給數組賦多個值只有在數組初始化時,也就是在聲明數組時,才是合法的。象下面代碼現實的表達式都是錯誤的:
mystring[ ] = "Hello";
mystring = { 'H', 'e', 'l', 'l', 'o', '\0' };
因此記住:我們只有在數組初始化時才能夠同時賦多個值給它。其原因在學習了指針(pointer)之后會比較容易理解,因為那時你會看到一個數組其實只是一個指向被分配的內存塊的常量指針(constant pointer),數組自己不能夠被賦予任何數值,但我們可以給數組中的每一個元素賦值。
在數組初始化的時候是特殊情況,因為它不是一個賦值,雖然同樣使用了等號(=) 。不管怎樣,牢記前面標下畫線的規則。
給字符序列賦值的方法是使用一些函數,例如strcpy。strcpy (string copy) 在函數庫cstring (string.h) 中被定義,可以用以下方式被調用:
strcpy (string1, string2);
這個函數將string2 中的內容拷貝給string1。string2 可以是一個數組,一個指針,或一個字符串常量constant string。因此用下面的代碼可以將字符串常量"Hello"賦給mystring:
strcpy (mystring, "Hello");