簡體   English   中英

C ++中int *和char *之間的區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM