C指针问题

dha*_*0us 8 c pointers

用于:

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

a是可以存储整数的地址. &a是存储a的地址.然后,&a存储在哪里?并且,&(&a)存储在哪里?并且,&(&(&a))存储在哪里?地址存储在哪里停止?

sha*_*oth 7

如果您没有明确写入&a它将不会存储在任何地方.如果你写了,那么地址将被计算并存储在一个未命名的变量(临时)或你编写的命名变量中.

例如:

functionCall( &a ); // address will be in a temporary variable used for passing the parameter
int** b = &a; // address will be stored in variable b
otherFunctionCall( &&a ); // illegal, since &a is an expression operator & can't be applied to it
Run Code Online (Sandbox Code Playgroud)


J-1*_*DiZ 4

&a是一个常数。

&(&a)是非法的。

  • 它是一个右值(即,放在赋值运算符右侧的值),因此就程序而言是一个常量。事实上,它在不同的运行中可能具有不同的值,这一事实是无关紧要的。 (3认同)
  • 严格来说, &a 是临时的,因此是右值,并且您不能获取右值的地址。您可以根据需要将其称为“常量”或“大象”,无论哪种方式您都没有使用标准语言。 (3认同)
  • `&a` 并不是真正的常量。变量可以在堆栈上。它是在运行时计算的。 (2认同)