【发布时间】:2014-04-10 08:51:05
【问题描述】:
char buffer[]="foobar";
我知道缓冲区是指向第一个元素的 char* 指针,所以 buffer==&buffer[0] 但是 为什么&buffer==buffer? &buffer 应该给出缓冲区 char* 的内存地址 而不是第一个元素的地址?
另外,当我做 (int)buffer 时会发生什么?
【问题讨论】:
-
缓冲区的内存地址是第一个元素的内存地址。然而
&buffer和buffer实际上有不同的数据类型,所以如果你真的编写了表达式&buffer == buffer,你至少应该得到一个警告。试试看。 -
如果您尝试使用
(int)buffer,编译器将首先将buffer转换为指针,然后将该指针的位解释为和int。如果指针大于 int,这也可能导致警告,但我不确定。 -
buffer不是 指针 (char *) - 它是一个数组 (char []) - 如果您想看到一个重要的区别,请尝试使用buffer++.它会衰减到一个指针是各种情况。 -
请不要对您的问题文本进行激进的更改...这会使更改后第一次查看此内容的人感到困惑。
-
请避免在回答后删除您的问题。 SO 旨在成为带有答案的问题档案。只是答案将毫无意义。