Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 编译器如何在内部区分指针和普通变量?_C_Pointers - Fatal编程技术网

C 编译器如何在内部区分指针和普通变量?

C 编译器如何在内部区分指针和普通变量?,c,pointers,C,Pointers,好的,这里,p指向a;p还有一个地址,在这个地址中,存储了a的地址(如果我是对的) 所以a:(某个地址):10 p:(某个地址):a的地址 现在我知道指针是如何工作的;我只是想知道编译器如何区分指针和普通变量?(这似乎是个愚蠢的问题,但的确如此)我认为这只是数据类型的问题int*与int是不同的类型,不同的是,我认为它们与任何其他变量一样。比如编译器如何区分char和int 在编译时,编译器会注意变量声明并查找定义的变量的数据类型。因此,在看到宣言之后, int a=10; int *p=&am

好的,这里,p指向a;p还有一个地址,在这个地址中,存储了a的地址(如果我是对的)

所以a:(某个地址):10 p:(某个地址):a的地址


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

我认为这只是数据类型的问题
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;