6

普通文字是指地址,而 *literal 是指地址的实际值吗?所以,之后:

int i = 0;
int *iPointer = &i;

以下表达式将查找 VALUE AT 内存地址 &i:

*iPointer

以下将简单地产生内存地址&i:

iPointer

我逐步验证了我的假设,但我想确定(你永远不会知道这些事情)。

我想我只是对 * 符号在声明和访问中的不同用途感到困惑。

4

2 回答 2

8

是的,这完全正确。

另外,请注意,&也可以根据上下文声明引用。

在声明中,*声明一个指针类型。

当应用于指针(如*ptr)时,它表示解引用运算符并返回指针指向的值。

请注意,它operator *可以重载,因此您也可以将其应用于对象,而不仅仅是指针,并让它做任何您想做的事情。

于 2012-08-13T17:08:02.087 回答
2

声明模仿使用。

如果您有一个指向p整数值的指针,您可以通过p使用一元运算符取消引用来访问该整数值*,如

x = *p;

表达式 的类型*pint,所以 的声明p

int *p;

变量 的类型p是“指向”的指针int,或者int *。然而,声明被写成表达式 *p的类型是int.

因此,任何时候想要访问 指向的整数值p,都必须使用*p. 如果您只关心 中包含的地址值p,则只需使用p. 例如,取消引用 NULL 指针会导致未定义的行为,因此您至少要在尝试取消引用之前检查指针值是否不是 NULL:

if (p != NULL)
  x = *p;

在条件中,我们关心的是 中包含的值p,因此我们不会取消引用它。在语句中,我们关心p 指向的值,因此我们在此处取消引用它。

注意声明

int* p, q;

是相同的

int *p;
int q;

p将其声明为指针;q被声明为常规int

于 2012-08-13T18:11:52.993 回答