为什么指针在指向整数数组和字符数组时表现不同?
例如
int num[] = {1,2,3};
cout << num ;
这会打印出第一个元素的 ADDRESS
char list[] = { '1', '2', '3'};
cout << list ;
这会打印出整个数组元素的 VALUE !
同样地
cout << (num+1) ;
打印出第二个元素的ADDRESS。而
cout << (list+1);
从第二个元素开始输出整个数组的VALUE
根据我的理解,数组名称是指向数组第一个元素的指针。如果没有解除引用运算符(*),指针应返回元素的地址。但是为什么char指针返回值?
答案 0 :(得分:4)
指针的行为不同:行为是C ++标准库处理指针输出的方式。
具体来说,运算符<<
有一个non-member overload for const char *
,它处理以null结尾的C字符串。这是应用于打印char
数组的重载。请注意,您的字符数组不以null结尾,因此打印它会产生未定义的行为。您可以通过向字符数组添加零来解决此问题:
char list[] = { '1', '2', '3', '\0'};
还有an overload that takes void *
,适用于打印int
指针。