指针以及编译器如何区分指针和普通变量

时间:2018-10-02 11:28:55

标签: c pointers

int a=10;
int *p=&a;

好的,这里p指向a; p也有一个地址,并且在该地址中存储了a的地址(如果我没错的话)。

因此a :(某些地址):10 p :(某些地址):a的地址

现在我知道指针如何工作了;我只想知道编译器区分指针和普通变量? (似乎是一个愚蠢的问题,但是的)

2 个答案:

答案 0 :(得分:2)

我认为这只是数据类型的问题。 int*int是不同的类型,除了我认为它们与任何其他变量一样。就像编译器如何区分charint

答案 1 :(得分:1)

在编译时,编译器会记录变量声明,并查找已定义变量的数据类型。因此,看到声明后

int a = 10;
int* p = &a;

编译器知道变量的数据类型(但仍然不知道值)。

在运行时,编译器需要为变量分配内存(对于'int'和'int *'显然不相同),以便可以存储值。因此,编译器应该知道数据类型。

以相同的方式,编译器可以处理不同的数据类型。