为什么C编译器会区分整数和指针?

rid*_*elf 0 c pointers

我在这里已经阅读了很多关于C指针的问题和答案,但是没有找到解释为什么C不允许地址存储在常规int中的任何东西 - 它似乎更简单地输入:

int a = 100;
int b = &a;
int c = &b;    //etc
Run Code Online (Sandbox Code Playgroud)

而不是

int a = 100;
int* b = &a;
int** c = &b;    //etc
Run Code Online (Sandbox Code Playgroud)

实际上,我不确定是否所有编译器都不允许这样做,或者它是否仅标记警告.但是,如果我完成同样的事情,(存储变量的地址以供参考),如果我使用指针表示法或直接分配值,它会有什么不同?

unw*_*ind 5

最根本的原因当然是当你想使用 一个指针,即取消引用它来访问它指向的值时,你必须知道该值的类型.

否则,编译器将如何为该特定类型生成正确的指令?

考虑指向字符的指针与指向的字符int.在大多数情况下,后一个值是4,有时是8倍.显然,这会影响访问和处理值的方式.

在不区分指针类型的情况下,这变得不可能.