c++ - 我不明白数组名称是如何指向数组的指针

标签 c++ arrays pointers

<分区>

我正在读一本 C++ 的书,我正在做一些测试,因为我不明白一些东西,当我尝试打印这 3 行时,我期望所有 3 行都有不同的东西。第一个,指针在内存中的位置,第二个,指针存储的地址,第三个,指针存储的地址处的值。但前两个是相同的:

cout <<&arey <<"\n";
cout <<arey <<"\n";
cout <<*arey <<"\n";

输出:

0x6afee8
0x6afee8
0

谁能解释为什么我读到数组的名称是指向数组的指针,所以如果它是指针,它应该有自己的内存地址吗?

最佳答案

I dont understand how an arrays name is a pointer to the array

不是。

I have read that the name of the array is a pointer to the array

写这篇文章的人都在骗你。

数组的名字就是数组的名字。

Can someone explain why

在某些条件下(例如,将其传递给函数),它会自动(且透明地)转换为指向数组第一个元素的指针。这是我们从 C 继承的一个不幸的事实。

但数组的名称仍然只是数组的名称。

所以:

arey          An array
&arey         Address of the array
f(&arey)      Passing the address of the array
f(arey)       Still passing the address of the array (ish) - thanks a lot, C!
f(*arey)      Passing the first element's value

现在考虑 cout << x实际上是 cout.operator<<(x) (即函数调用)并解释您的输出。

if it is a pointer it should have its own memory address right?

如果它是一个指针,那么,是的,它会。

关于c++ - 我不明白数组名称是如何指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49036693/

相关文章:

java - 如何引用数组的一部分?

C# 比较字符串值数组

c++ - 数组索引越界行为

C 循环未中断

java - 备份阵列

c++ - SleepEx 是否保证在超时之前调用所有挂起的完成回调?

c++ - 是否可以在 multimap 中使用自定义查找功能?

c++ - 为什么存储整数的内存块的值会反复变化?

c++ - Microsoft VC++、vsnprintf 和管道 (IO) 错误

c++ - 将复杂对象传递给 C++ 中的函数,但数组订阅运算符无法正常工作