[英]difference between int* and char* in c++
#include <iostream>
using namespace std;
int main() {
int * a[5];
char * b[5];
cout<<a[1]; // this works and prints address being held by second element in the array
cout<<b[1]; // this gives run time error . why ?
return 0;
}
誰能告訴我cout<<b[1]
給出運行時錯誤? int和char數組的行為不應該彼此相似嗎?
因為IOStreams專為處理char*
而設計。
char*
通常指向C字符串,因此IOStreams只會假定它們這樣做並取消引用它們。
你沒有。
就像其他人所說的那樣,iostream格式的輸出運算符認為char*
指向C樣式的字符串並嘗試訪問該字符串。
到目前為止,其他人還沒有說的是,如果您對指針感興趣,則需要將有問題的指針轉換為void*
。 例如:
std::cout << static_cast<const void*>(buf[1]);
C ++(從C繼承)特別對待字符指針。 當您嘗試打印int*
類型a[1]
,將打印地址。 但是,當您嘗試打印char*
類型的b[1]
,iostream庫-遵循該語言的其余部分-假定指針指向以零結尾的字符串的第一個字符。 您的兩個輸出語句都是初始化行為,但是在char*
情況下,崩潰的可能性更大,因為指針已被取消引用。
輸出流(例如cout)會特別考慮char *,而不會將其分配給其他指針。 對於除char *以外的指針,它將僅將指針的值打印為十六進制地址。 但是對於char *,它將嘗試打印出char *引用的C樣式(即char的空終止數組)字符串。 因此,它將嘗試取消引用char指針,因為@AlexD在評論中指向您的帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.