0

让我们假设这段代码:

int a;
int * point;
a = 5;

point = &a; // <-----

我指的线是一样的...

*point = a;

...还是有区别?

4

6 回答 6

3
  • point = &a;使'point'指向'a'。
  • *point = a;将 'a' 的值分配给任何 'point' 已经指向的东西。

'point' 包含一个地址。'&' 从变量中获取地址。 point = &a;获取“a”的地址,并将其分配给指针。

'*' 引用一个指针(获取它指向的变量),因此*point = a将 'a' 的值分配给取消引用的指针 - 即,无论变量的地址已经存储在指针中。

于 2013-09-26T20:11:49.040 回答
2

完全不同。

point = &a;

表示“point现在包含”的地址a

*point = a;

表示“point现在指向的(当前未定义的)内存区域包含”的值a。该版本可能会崩溃。

于 2013-09-26T20:12:40.937 回答
0

不同之处在于您正在取消引用point,此时可能有无效的地址。它实际上不会将值写入该位置point

于 2013-09-26T20:11:51.183 回答
0

不,它们不一样:

*point = a;

要求point已经指向当前程序中的有效内存,它不会,因此将是未定义的行为。而这一行:

point = &a;

将分配给point现有对象的地址。

于 2013-09-26T20:13:01.147 回答
0

第一行将 ( &a) 的地址分配给指针。

第二行将 a 的值分配给指针 ( ) 指向的内存块*pointer

注意:如果指针没有指向范围内变量的地址,或者没有指向动态分配的地址,则在第二种情况下会导致内存损坏。

于 2013-09-26T20:13:14.263 回答
0

其实这

*point = a;

可能会崩溃,因为您尚未分配point要指向的内存。它也不是说堆栈变量-在这种情况下,它将将该堆栈变量的值更改为a.

换句话说,point没有指向任何东西,并且您正在尝试设置该不存在的“对象”的值。

于 2013-09-26T20:17:19.643 回答