2012-04-05 2 views
1

Будут ли эти два присвоения эквивалентными, то есть перфорировать точно такую ​​же вещь?dereference pointer -vs- & -оператор

*pointer = object 

pointer = &object 

, где указатель является указателем на «объект-экземпляр».

Или это имеет смысл только для примитивных типов.

+3

Они определенно * ОЧЕНЬ * разные. Вы должны прочитать больше (и поэкспериментировать) о указателях. –

+0

Это одна из тех вещей, которые намного легче понять, если вы вытаскиваете карандаш и какую-то бумагу и * рисуете *, что происходит с помощью ящиков и стрелок. IMO, карандаш и бумага - лучшие инструменты для решения большинства проблем, связанных с указателями. – molbdnilo

+0

Да, ты прав.должен был продумать это до публикации, я думаю. Спасибо за советы, хотя! –

ответ

5

Абсолютно нет.

*pointer = object 

изменяет память, на которую указывает указатель.

pointer = &object 

изменяет указатель.

pointer ----> object1 
&object ----> object 

В первом случае это будет:

pointer ----> object 
&object ----> object 

Во втором случае:

    ----> object1 //could turn into a memory leak 
&object, pointer ----> object 
11

Нет, это не то же самое.

pointer = &object комплекты pointer, так что он указывает на object.

*pointer = object устанавливает значение предмета, на которое указывает pointer, равное значению object.

0

NO.

Ваше первое выражение присваивает значение объекта указателю.

Предположим, что переменная вашего указателя указывает на 0x1234. после первого присвоения адрес 0x1234 будет содержать значение «объект».

тогда как второе присваивание заставит указатель указывать на адрес объекта.

если вы измените объект значения после того, как указатель первого присваивания ничего не заметит.

, где в качестве второго задания, если изменить значение объекта, вы можете получить обновленное значение через

*pointer. 
2

Нет, это не эквивалентны. Первый делает целевое значение указателя равным объекту с правой стороны. Второй изменяет сам указатель так, чтобы он указывал на объект с правой стороны.

Другими словами, после первого в памяти есть два объекта со значениями, равными object. После второго есть только один объект с этим значением, а также есть указатель, указывающий на этот объект.