char数组如何存储在内存中?

时间:2019-02-23 19:17:21

标签: c++

我对char数组的内存地址感到困惑。这是演示代码:

char input[100] = "12230 201 50";
const char *s = input;
//what is the difference between s and input?

cout<<"s = "<<s<<endl;                    //output:12230 201 50
cout<<"*s = "<<*s<<endl;                  //output: 1

//here I intended to obtain the address for the first element
cout<<"&input[0] = "<<&(input[0])<<endl;  //output:12230 201 50

char数组本身是指针吗?为什么&运算符不给出char元素的内存地址?如何获取单个条目的地址?谢谢!

2 个答案:

答案 0 :(得分:5)

在最后一行中,表达式&(input[0])确实会导致char数组的第一个char地址,即char数组input的地址。因此,您的代码可以正常工作。

但是输出运算符<<对于char *有一个有用的重载,并将您的char数组的比赛打印为C字符串(打印所有char,直到找到零char为止)。

要打印地址,请执行以下操作:

void *p = input;
std::cout << "p=" << p << "\n";

答案 1 :(得分:0)

即使在大多数情况下,数组都可以视为指向数组中第一个元素的指针,但它们与指针并不相同。从技术上讲-arrays decay to pointers

&(input[0])返回一个char*,其中有一个重载,它会打印实际的字符串。要打印地址,可以使用static_cast<void*>(&input[0])