我想知道并且仍然没有找到答案。 其本质如下:地址“ a”和地址a [0]匹配,但同时在同一地址有2个不同的值。 数组的名称是指向其第一个元素的指针,因此,其值的地址为“ a [0]”,此处的所有内容均符合逻辑,但是当我查看地址“ a [0]”时,其与地址“ a”。同时,“ a”和“ a [0]”的含义不同!
为什么?!
答案 0 :(得分:2)
我什至无法计算有多少个C / C ++学习者被这种错误的假设(显然仍然在学校教过)而烧死了,这个假设是C / C ++内置数组的名称指向第一个元素。
这种假设导致对内置类型系统的深刻误解和不信任,这是完全错误的。的确,在某些使用场景中(实际上有很多使用场景),数组名称被转换(拒绝了)到第一个元素的地址。但这是一次转换。
事实是,数组的第一个元素位于某个地址中。如果获得第一个元素的地址,则最终将获得指向第一个元素类型的指针。如果获得数组本身的地址,则将获得指向该数组的指针,它是另一种指针类型。
那两个指针可能具有相同的字节表示(即指向相同的物理内存)这一事实是无关紧要的。您越早理解和接受它,经历的“为什么为什么”的经历就越少。