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
.
的一元运算符
我正在准备考试,刷新指针知识
我正在看这个小练习:
考虑以下 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
.