我想知道,但仍然没有找到答案。 其本质如下:地址“a”与地址a[0]匹配,但同一地址同时有2个不同的值。 数组的名称是指向其第一个元素的指针,因此,其值具有地址“a [0]”,这里一切都是逻辑的,但是当我查看地址“a [0]”时,它与地址“a”。同时,“a”和“a[0]”的含义是不同的!
为什么?!
最佳答案
我什至无法计算有多少 C/C++ 学习者被这个错误假设(显然仍在学校中教授)所困扰,即 C/C++ 内置数组的名称是指向的指针第一个元素。
这种假设导致了对内置类型系统的深刻误解和不信任,而且它是完全错误的。确实,在某些使用场景(实际上很多)中,数组的名称会被转换(据说已经退化)为第一个元素的地址。但这是一种转换。
事实是,数组的第一个元素位于某个地址。如果获得第一个元素的地址,最终将得到指向第一个元素类型的指针。如果获得数组本身的地址,您将获得指向该数组的指针,它是不同的指针类型。
这两个指针可能具有相同的字节表示(即指向相同的物理内存),这一事实是无关紧要且没有实际意义的。你越早理解和接受它,你经历的“为什么为什么为什么”的经历就越少。
关于c - 数组的地址和它的第一个元素的地址是一个回填问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55480619/