另一个C指针问题

dha*_*0us 1 c pointers

以下代码:

int *a;
*a = 5;
Run Code Online (Sandbox Code Playgroud)

最有可能导致分段错误,我知道原因.

以下代码:

int a;
*a = 5;
Run Code Online (Sandbox Code Playgroud)

甚至不会编译.(gcc说:unary*的无效类型参数).

现在,指针只是一个整数,用于存储地址.所以,如果我说:为什么它应该是一个问题:

*a = 5;
Run Code Online (Sandbox Code Playgroud)

理想情况下,这也应该导致分段错误.

Mar*_*wis 14

指针不是整数.C有数据类型

a)防止某些编程错误,以及

b)提高程序的可移植性

在某些系统上,指针可能不是整数,因为它们实际上由两个整数(段和偏移)组成.在其他系统上,"int"类型不能用于表示指针,因为int是32位而指针是64位.由于这些原因,C不允许直接使用int作为指针.如果要使用足以容纳指针的整数类型,请使用intptr_t.