【发布时间】:2010-05-26 19:10:38
【问题描述】:
我一直想知道编译器如何看待指向结构的指针(假设在 C 中)和结构本身的真正区别是什么。
struct person p;
struct person *pp;
pp->age,我总是想象编译器会这样做:“结构中 pp 的值 + 属性“年龄”的偏移量”。
但是person.p 的作用是什么?这几乎是一样的。对我“程序员”来说, p 不是内存地址,它就像“结构本身”,但当然这不是编译器处理它的方式。
我的猜测是它更多的是语法上的东西,编译器总是做(&p)->age。
我说的对吗?
【问题讨论】:
-
不是为了劫持这个问题,但作为一名学生,我很好奇在哪个领域可以了解这类事情。编译器设计? (我的意思是,显然我学到了 (*p).q 与我的 c++ 类中的 p->q 相同)
-
通常是低级计算机系统课程(处理内存分配、堆栈帧等的那种)。
-
谢谢 - 我才大二,所以我相信我们最终会到达那里
-
+1 有趣/好问题。
-
几种语言在两种情况下都使用一种语法。有人知道为什么 C 不知道吗?
标签: c compiler-construction struct