C 编译器如何在内部区分指针和普通变量?
好的,这里,p指向a;p还有一个地址,在这个地址中,存储了a的地址(如果我是对的) 所以a:(某个地址):10 p:(某个地址):a的地址C 编译器如何在内部区分指针和普通变量?,c,pointers,C,Pointers,好的,这里,p指向a;p还有一个地址,在这个地址中,存储了a的地址(如果我是对的) 所以a:(某个地址):10 p:(某个地址):a的地址 现在我知道指针是如何工作的;我只是想知道编译器如何区分指针和普通变量?(这似乎是个愚蠢的问题,但的确如此)我认为这只是数据类型的问题int*与int是不同的类型,不同的是,我认为它们与任何其他变量一样。比如编译器如何区分char和int 在编译时,编译器会注意变量声明并查找定义的变量的数据类型。因此,在看到宣言之后, int a=10; int *p=&am
现在我知道指针是如何工作的;我只是想知道编译器如何区分指针和普通变量?(这似乎是个愚蠢的问题,但的确如此)我认为这只是数据类型的问题
int*
与int
是不同的类型,不同的是,我认为它们与任何其他变量一样。比如编译器如何区分char
和int
在编译时,编译器会注意变量声明并查找定义的变量的数据类型。因此,在看到宣言之后,
int a=10;
int *p=&a;
编译器知道变量的数据类型(但仍然不知道值)
在运行时,编译器需要为变量分配内存(对于“int”和“int*”,内存显然不同),以便存储值。因此,编译器应该知道数据类型
同样,编译器可以处理不同的数据类型。你的问题对我来说有点模糊。您能否添加一个具体的示例,说明编译器“区分”的情况?或者你认为这发生在哪里?编译器会跟踪你告诉它的内容,你告诉它a包含一个数字,p包含一个指针。事实上,你让它做一个叫做a的东西,它是一个数字,还有一个叫做p的东西,它有一个指向数字的指针,你把
a
声明为int
,把p
声明为指向int
的指针。编译器就是这样知道的。我不明白你在问什么。我不确定你是否知道指针是如何工作的。
int a = 10;
int* p = &a;