给定:
int **a; // (double pointer)
int *b; // (pointer)
有没有区别在于 *a=b 和 a=&b?
给定:
int **a; // (double pointer)
int *b; // (pointer)
*a = b;
将变量 b
的值复制到指针 a
所指向的位置。a = &b
将变量 b
的地址复制给指针 a
。*a = b;
你正在将b
的值分配给a
所指向的任何位置。
a = &b;
在这里,你将b
的地址赋值给了a
*a = b
将 b
赋值给指针变量 a
所指向的内存地址。
a = &b
将变量 b
的地址赋值给指针变量 a
。
&
是获取变量地址的运算符。
*
是能够检索指针所指向的值的运算符,你应该称之为间接过程。
所以,是的,这两个语句是不同的。
我认为这里的问题在于实践中两者有何区别。以下示例说明了这一点:
int x = 10;
int *y;
int *z;
y = &x;
*z = x;
printf("x: %d, *y: %d, *z: %d\n", x, *y, *z);
x = 20;
printf("x: %d, *y: %d, *z: %d\n", x, *y, *z);
指针 z 指向的值没有被更新为新的 x 值 20,而指针 y 指向的值已经被更新。