c - 数组的地址和它的第一个元素的地址是一个回填问题

标签 c

我想知道,但仍然没有找到答案。 其本质如下:地址“a”与地址a[0]匹配,但同一地址同时有2个不同的值。 数组的名称是指向其第一个元素的指针,因此,其值具有地址“a [0]”,这里一切都是逻辑的,但是当我查看地址“a [0]”时,它与地址“a”。同时,“a”和“a[0]”的含义是不同的!

为什么?!

enter image description here

最佳答案

我什至无法计算有多少 C/C++ 学习者被这个错误假设(显然仍在学校中教授)所困扰,即 C/C++ 内置数组的名称是指向的指针第一个元素。

这种假设导致了对内置类型系统的深刻误解和不信任,而且它是完全错误的。确实,在某些使用场景(实际上很多)中,数组的名称会被转换(据说已经退化)为第一个元素的地址。但这是一种转换。

事实是,数组的第一个元素位于某个地址。如果获得第一个元素的地址,最终将得到指向第一个元素类型的指针。如果获得数组本身的地址,您将获得指向该数组的指针,它是不同的指针类型。

这两个指针可能具有相同的字节表示(即指向相同的物理内存),这一事实是无关紧要且没有实际意义的。你越早理解和接受它,你经历的“为什么为什么为什么”的经历就越少。

关于c - 数组的地址和它的第一个元素的地址是一个回填问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55480619/

相关文章:

c - 进行 JACK 编程测试时,我得到响应 : usage: jack_simple_client

c - 是否存在没有 LL(1) 等价物的 LR(k) 文法

c++ - 为指令集模拟器设计高效内存

C - 在函数中返回 2 个值并尝试使用它们

c - 奇怪的C整数不等式比较结果

c++ - C/C++ 结构内存布局等效

C ODBC将sql结果保存在动态数组中

C 函数定义和 extern 关键字

c - 从 RGB888 数据生成的 Tiff 图像不正确

java - 有没有一种方法可以读取一段文本并对其进行部分操作?