c ++中int *和char *之间的区别

时间:2016-03-14 19:14:28

标签: c++ pointers

#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数组的行为是否应该相似?

4 个答案:

答案 0 :(得分:6)

因为IOStreams专门用于处理char*

char*通常指向一个C字符串,所以IOStreams只会假设他们这样做并取消引用它们。

你的不是。

答案 1 :(得分:3)

正如其他人所说,iostream格式化输出操作符会将char*视为指向C风格的字符串并尝试访问此字符串。

其他人到目前为止还没有说过,如果你对指针感兴趣,你需要将指针转换为void*。例如:

std::cout << static_cast<const void*>(buf[1]);

答案 2 :(得分:2)

C ++(从C继承)专门处理字符指针。当您尝试打印a[1]类型int*时,将打印该地址。但是,当您尝试打印b[1]类型为char*的iostream库时 - 遵循其余语言 - 假设指针指向以零结尾的字符串的第一个字符。您的输出语句都是初始化行为,但在char*崩溃的情况下更可能因为指针被解除引用。

答案 3 :(得分:2)

cout等输出流特别考虑了char *,它没有给其他指针。对于除char *之外的指针,它只是将指针的值打印为十六进制地址。但对于char *,它将尝试打印出char *引用的C风格(即空终止的char数组)字符串。因此,它会尝试取消引用char指针,因为@AlexD在评论中指向你的帖子。