C ++中字符数组与整数数组的指针

时间:2014-07-16 16:23:05

标签: c++ c arrays pointers

我试图理解C ++中的指针和数组。我注意到在以下代码中正确输出a会给出array中第一个元素的地址,但是输出c会给出pk而不是地址。

int array[3]={4,7,2};
int * a;

a= array;

char Carray[3]={'p','k','\0'};
char * c;

c= Carray;

cout << a << "\n";
cout << c << "\n";

这是找到Carray中第一个元素的地址的错误方法吗?或者这是cout如何解释整数和字符数组指针的一些怪癖。

输出:

Ox23fe30
pk

5 个答案:

答案 0 :(得分:6)

这是cout如何解释字符数组指针的一个怪癖。

当给出指针时,cout将打印地址,除非它是char*,在这种情况下,它将指针解释为c样式字符串(指向字符数组的指针结束将是一个空字节)。

要打印字符数组的地址,请先将其转换为void*cout << reinterpret_cast<void*>(c) << "\n";

答案 1 :(得分:5)

使用c,您正在呼叫operator<<(std::istream&, char*)。只打印字符直到它到达'\0',就像常规的旧C风格字符串一样。

使用aoperator<<(std::istream&, int*)打印地址。

答案 2 :(得分:1)

这是来自C的“怪癖”。在C中,字符串是以空值终止的char[]cout允许使用C风格的字符串,因此它将字符指针输出为字符串。

答案 3 :(得分:0)

cout以不同于int指针的方式解释char指针,所以你获取第一个数组元素地址的方法还可以。

答案 4 :(得分:0)

指向char的指针通常被视为C和C ++中以NULL结尾的字符串。对于诸如cout之类的STL流,char指针肯定被视为以NULL结尾的字符串。