编译器如何理解指针类型?

Nar*_*rek 3 c++ compiler-construction pointers

c ++编译器如何理解指针类型?我知道指针的大小等于OS的WORD(32或64).那么它是否存储了关于类型的32(或64)位的一些信息?只是因为你不能在一个类型上有一个指针并为该指针分配另一个具有不同类型的指针.

Jam*_*lis 10

编译器知道指针的类型,因为源代码指出指针的类型:

int* ip;   // ip is a pointer to an int

float* fp; // fp is a pointer to a float

void* vp;  // vp is a pointer to some unknown type; need to cast it to a pointer
           // to an actual type in order to access the pointed-at object
Run Code Online (Sandbox Code Playgroud)

  • @glowcoder:放松,伙计.你是两个指针!(WoW的少年笑话) (4认同)

JUS*_*ION 5

正如詹姆斯所说,编译器“知道”指针是什么类型,因为你告诉它。

然而,不那么轻率的是,在幕后发生的事情(以非常简单的解释)是解析器在读取代码时,用检查和执行语言规则所需的信息来注释它的每个重要部分它正在认识。因此给出这个示例代码:

int*    ip;
// do some stuff
double* dp = ip;
Run Code Online (Sandbox Code Playgroud)

编译器将在幕后执行类似的操作(同样以极其简化的形式):

嗯...有一个叫做“ip”的东西。我最好记下它是一个整数指针。好的,这就是所谓的“dp”。我最好记下它是一个双指针。好的,现在,他要把ip分配给dp。但是……坚持住!ip 是整数,dp 是双精度数。我不能那样做!

...编译器在屏幕上呕吐...

现实比上述情况要简单得多(因为计算机根本不会思考任何事情——这一切都非常机械),而且要复杂得多(因为我在机械过程中掩盖了大约十亿个细节)。