C中的指针练习

Pointer exercise in C

我正在准备考试,刷新指针知识

我正在看这个小练习:

考虑以下 C 程序片段。对于每个程序,填写空的下划线点,使变量 x 的最终值为 0。

int x;
int *p;
p = &_____;
*p = _____;

我假设第一个下划线是p = &x。不过,我对第二个有点困惑。 鉴于我们已经有了 int *p,在这种情况下 p = 和 *p = 之间有什么区别?

int *p;

... 将 p 声明为 int * 类型的变量(指向 int 的指针)。鉴于此代码总体上只有在出现在函数内部时才有效,因此该声明不会为 p 赋值。因此,表达式 *p 在该声明之后(还)没有意义,尽管它在语法上是正确的。

后续

p = 

为(指针)p 赋值。您对 p = &x; 的想法似乎有道理。但这是关于指针 p 本身的值,而不是关于 p 指向的对象的值。

一旦 p 实际上指向了一个由分配给它的对象,它指向的对象的值可以通过 *p 访问,特别是,一个值可以是通过 *p = <value here>;.

分配给指向的对象

也许让您感到困惑的是,在任何情况下都不是指针名称的 * 部分。在第 2 行的声明中,它是为变量 p 声明的类型 (int *) 的一部分。在第 4 行的赋值中,它是应用于变量 p.

的一元运算符