鉴于:
int **a; // (double pointer)
int *b; // (pointer)
*a=b
和有什么区别a=&b
吗?
首先,*a = b;
将变量的值复制b
到指向的位置a
。
第二,a = &b
复制b
to的地址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 指向的值会更新。
*a=b : *a 是一个指针变量,它存储另一个变量的地址,即 b 和 a=&b :a 只是一个普通变量,它存储 b 的地址,即使它存储 b 的地址,它也不会存储完整的地址取决于数据类型