我对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元素的内存地址?如何获取单个条目的地址?谢谢!
答案 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])
。