int a=10;
int *p=&a;
好的,这里p指向a; p也有一个地址,并且在该地址中存储了a的地址(如果我没错的话)。
因此a :(某些地址):10 p :(某些地址):a的地址
现在我知道指针如何工作了;我只想知道编译器区分指针和普通变量? (似乎是一个愚蠢的问题,但是的)
答案 0 :(得分:2)
我认为这只是数据类型的问题。 int*
与int
是不同的类型,除了我认为它们与任何其他变量一样。就像编译器如何区分char
和int
。
答案 1 :(得分:1)
在编译时,编译器会记录变量声明,并查找已定义变量的数据类型。因此,看到声明后
int a = 10;
int* p = &a;
编译器知道变量的数据类型(但仍然不知道值)。
在运行时,编译器需要为变量分配内存(对于'int'和'int *'显然不相同),以便可以存储值。因此,编译器应该知道数据类型。
以相同的方式,编译器可以处理不同的数据类型。