對於下面給出的代碼,爲什麼輸出「This is the string」,而不是字符串中第一個字符的地址'T'?C++中的簡單字符串指針
int main()
{
char myString[] = "This is a string";
char *ptr = &myString[0];
cout << ptr << endl;
return 0;
}
輸出將被上述點擊。
對於下面給出的代碼,爲什麼輸出「This is the string」,而不是字符串中第一個字符的地址'T'?C++中的簡單字符串指針
int main()
{
char myString[] = "This is a string";
char *ptr = &myString[0];
cout << ptr << endl;
return 0;
}
輸出將被上述點擊。
char *ptr = &myString[0];
手段使ptr
點的myString
第一個字符。然後cout
有<<
過載,需要一個char *
,將打印它所指向並和前面元素,直到它到達一個'\0'
如果你要打印的數組的地址,那麼你需要將指針轉換別的像void*
第一,然後打印:
cout << reinterpret_cast<void*>(ptr) << endl;
爲什麼輸出「這是字符串」,而不是第一個字符的字符串,
'T'
的地址?
有一個過載operato<<
其LHS是std::ostream
和RHS是char const*
。這個函數打印字符串。
如果要打印'T'
的地址,可以將指針投射到void*
。
cout << static_cast<void*>(ptr) << endl;
由於'&myString [0]'與'myString'完全相同,所以定義如下。 –
用於'char *'的'operator <<'輸出一個字符串。 – crashmstr