天天看點

指針和c-風格字元串

指針和c-風格字元串

指針和數組的特殊關系可以擴充到c-風格字元串。請看下面的代碼

char flower[10] = "rose";
cout << flower << "s are red\n";
           

數組名是第一個元素的位址,是以cout語句中的flower是字元‘r’的位址。cout對象認為char的位址是字元串的位址,是以他列印帶位址處的的字元,然後繼續列印後面的字元,直到遇到‘\0’為止。總之,如果提供一個字元的位址給cout,它将從該字元開始列印,直到"\0"為止。

關鍵不在于flower是數組名,而在于他是一個char的位址。這意味這可以将指向char的指針變量作為cout的參數,因為他也是char的位址。

那麼後邊的"s are red\n"情況是怎樣的呢?在c++中引号括起來的字元串像數組名一樣,也是第一個元素的位址。上述代碼不會将整個字元串發送給cout,而是隻發送該字元串的位址。這意味這數組中的字元串、常量的字元串和指針描述的字元串,處理方式是一緻的,都将傳遞他們的位址。于逐個傳送字元相比,這樣工作量更少。

如果想要列印Char字元串的位址,可以嘗試下面的代碼

cout<<(int *)flower;
           

NOTE:早cout和多數c++表達式中,char數組名、char指針以及引号括起來的字元常量都被解釋為首字元的位址。

繼續閱讀