"a=b"和"a=&b"有什么区别?

4

给定:

int **a; // (double pointer)
int *b;  //  (pointer)

有没有区别在于 *a=b 和 a=&b?

你的问题标题与问题内容不符。哪一个是正确的? - user703016
我不明白,哪里不匹配? - Vignesh Venkat
你认为呢?为什么你不能推断出等号两边表达式的类型? - Jens Gustedt
1
@VigneshVenkat 现在已经被编辑了。你最初的问题不匹配。 - user703016
@Cicada 哎呀,对不起。谢谢。 - Vignesh Venkat
6个回答

6
第一个,*a = b; 将变量 b 的值复制到指针 a 所指向的位置。
第二个,a = &b 将变量 b 的地址复制给指针 a

2
*a = b;

你正在将b的值分配给a所指向的任何位置。

a = &b;

在这里,你将b的地址赋值给了a


1

*a = bb 赋值给指针变量 a 所指向的内存地址。

a = &b 将变量 b 的地址赋值给指针变量 a


1

& 是获取变量地址的运算符。

* 是能够检索指针所指向的值的运算符,你应该称之为间接过程。

所以,是的,这两个语句是不同的。


0

我认为这里的问题在于实践中两者有何区别。以下示例说明了这一点:

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 指向的值已经被更新。


0
*a=b:*a是一个指针变量,它存储另一个变量b的地址。
a=&b:a只是一个普通变量,它存储b的地址,即使它存储了b的地址,它也不会存储完整的地址,这取决于数据类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接