Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Занулить значение по ссылке 
V
    Опции темы
Rickert
Дата 3.7.2007, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Дело такое:
Код
int* t = new int;
*t = 124;
int* s = t;

К t доступа нет ни в каком виде. Есть только s, которая является такой же ссылкой, как и t.
Вопрос: как мне занулить значение указателя t?
То бишь, чтобы t = 0x0000 ?

Добавлено @ 05:51
Ведь если я укажу
Код
s = 0

t - так и останется прежним.

Это сообщение отредактировал(а) Rickert - 3.7.2007, 08:06


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MaXL
Дата 3.7.2007, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



Если доступ есть только к s то скорее всего ни как. Т.к. это отдельный указатель и с помощью него ты можешь повлиять только на данные находящиеся по адресу, на который соответственно указывается этот указатель, или изменить адрес, но тоже только этого указателя. Поэтому ни как.


--------------------
MaXL
PM MAIL   Вверх
Rickert
Дата 3.7.2007, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



MaXL, стопудов можно. Давно было дело - делал, но хоть убей не помню как.
Или меня тогда переглючило?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
W4FhLF
Дата 3.7.2007, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Rickert @  3.7.2007,  05:49 Найти цитируемый пост)
К t доступа нет ни в каком виде. Есть только s, которая является такой же ссылкой, как и t.


Так ссылкой или указателем? Это здесь очень важно smile 
В примере s указатель, под него выделяется отдельный участок памяти и имея доступ только к s ты к t никак не подберёшься. Если я правильно понял суть конечно. 


Это сообщение отредактировал(а) W4FhLF - 3.7.2007, 06:10


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
apook
Дата 3.7.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(W4FhLF @  3.7.2007,  06:10 Найти цитируемый пост)
s ты к t никак не подберёшься.

но ведь s туда же указывает что и t значит через s можно менять то что там находится поидее...
например так прекрасно работает:
Код

#include<stdio.h> 
#include<conio.h>


int main()
{

int *t = new int;
t[ 0 ] = 124;
int *s = t;

s[ 0 ]=0x0000;

printf( "%d", t[ 0 ] );
getch();
return 0;
}

или вопрос неточно задан




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
MaXL
Дата 3.7.2007, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

Репутация: нет
Всего: 2



apook, ты в своём примере зануляешь значение по этому указателю, а нужно менять адрес, на который указывает указатель.
Код

То бишь, чтобы t = 0x0000 ?

вопрос задан точно.


--------------------
MaXL
PM MAIL   Вверх
apook
Дата 3.7.2007, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



ааа понял тада ето что то хитрое, походу точно нельзя если только туда переместить кусок
памяти с другого адреса типа гора к Mагомету smile 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 3.7.2007, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
int* t = new int;
t = 124;

начнем с  того, что выделенная в первой строчке память потеряна навсегда. 
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
которая является такой же ссылкой, как и t.

ссылок тут нет вообще, здесь указатели
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
Вопрос: как мне занулить значение указателя t?
То бишь, чтобы t = 0x0000 ?

если интересует именно значение указателя, то "занулить" его в таком случае никак нельзя, кроме как t=0.
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
t - так и останется прежним. 

ага
PM MAIL WWW   Вверх
apook
Дата 3.7.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Слушай а сама переменная t где хранится ее адрес.. а не куда она указывает
а потом чтоб там чтото надо сделать что даже боюсь предположить.


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 3.7.2007, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(apook @  3.7.2007,  08:14 Найти цитируемый пост)
Слушай а сама переменная t где хранится ее адрес.. а не куда она указывает

ты фиг найдешь, где эта переменная находится. даже если взять самый простой случай, когда t и  s объявлены одна за одной в функции. тогда изначально нет проблемы "занулить" саму t, да и потом адресс её найти относительно s на 100% точно нельзя.
PM MAIL WWW   Вверх
Rickert
Дата 3.7.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Прошу прощения за каламбур: тут везде указатели, а не ссылки.
Цитата(Daevaorn @  3.7.2007,  07:04 Найти цитируемый пост)
начнем с  того, что выделенная в первой строчке память потеряна навсегда. 

Всмысле? Почему потеряна?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 3.7.2007, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Rickert @  3.7.2007,  08:56 Найти цитируемый пост)
Всмысле? Почему потеряна?

потомучто ты поменял значение указателя, он терь указывает непойми куда
Цитата(Rickert @  3.7.2007,  06:49 Найти цитируемый пост)
t = 124;




--------------------
Мой блог
PM MAIL WWW   Вверх
Rickert
Дата 3.7.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



vinter, пардон, там, есесно стоит *t = 124


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 3.7.2007, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а почему бы напрямую не занулить t? и вообще какой тебе смысл в простом занулении? освободи просто память и все


--------------------
Мой блог
PM MAIL WWW   Вверх
zkv
Дата 3.7.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Rickert @  3.7.2007,  06:09 Найти цитируемый пост)
стопудов можно. Давно было дело - делал, но хоть убей не помню как.
Или меня тогда переглючило?

можно так:
Код

    int* t = new int;
    *t = 124;

    int** s = &t;
    *s = 0;

или так:
Код

    int* t = new int;
    *t = 124;
    int*& s = t;
    s = 0;

PM MAIL   Вверх
Rickert
Дата 3.7.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Цитата(vinter @  3.7.2007,  08:09 Найти цитируемый пост)
а почему бы напрямую не занулить t? и вообще какой тебе смысл в простом занулении? освободи просто память и все 

Была ситуация такая, что именно не было доступа к t, о нём вообще не было ничего известно, но было s = t.
zkv, в яблочко! smile 

Это сообщение отредактировал(а) Rickert - 3.7.2007, 09:07


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
W4FhLF
Дата 3.7.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(Rickert @  3.7.2007,  09:07 Найти цитируемый пост)
zkv, в яблочко!


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


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Rickert
Дата 3.7.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Указатель на указатель - это ссылка? Первый пример. И вообще, речь-то шла об указателях. Я ж не имел виду, что надо решить без применения ссылок. Просто не так друг друга поняли мы с тобой.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
vinter
Дата 3.7.2007, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



W4FhLF, 
Цитата(zkv @  3.7.2007,  09:58 Найти цитируемый пост)
 int* t = new int;    *t = 124;    int** s = &t;    *s = 0;

где тут ссылка?


--------------------
Мой блог
PM MAIL WWW   Вверх
apook
Дата 3.7.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата

&t



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
zkv
Дата 3.7.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



apook, это адрес переменной, еще из Си, ссылки только в С++ появились smile
PM MAIL   Вверх
W4FhLF
Дата 3.7.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(vinter @  3.7.2007,  10:10 Найти цитируемый пост)
где тут ссылка?


опа, пардон) 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
apook
Дата 3.7.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(zkv @  3.7.2007,  10:21 Найти цитируемый пост)
это адрес переменной

А  один  хрен.
s ссылка на t по спп-вским понятиям так как означает одно и то-же smile smile почти

Это сообщение отредактировал(а) apook - 3.7.2007, 11:03


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
vinter
Дата 3.7.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(apook @  3.7.2007,  11:55 Найти цитируемый пост)
А  один  хрен.

xe. пахнет большооооой темой, и диким спором smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 3.7.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



да не парьтесь
на нижнем уровне нет разницы между ссылкой и указателем  smile 
все различие лишь на уровне синтаксиса и семантики С++


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
apook
Дата 3.7.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Спорить сильно не хочется но просто почему *s не назвать ссылкой на *t ведь *s используется вместо *t как *t и есть в этом контексте


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 3.7.2007, 16:25 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(apook @  3.7.2007,  14:45 Найти цитируемый пост)
но просто почему *s не назвать ссылкой на *t ведь *s используется вместо *t как *t и есть в этом контексте 

потому что в С++ ссылки имеют вполне конкретное определение.
PM MAIL WWW   Вверх
Rickert
Дата 4.7.2007, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



Цитата(Daevaorn @  3.7.2007,  16:25 Найти цитируемый пост)
потому что в С++ ссылки имеют вполне конкретное определение.

Я всегда считал, что например &s - ссылка на s. Разве нет? Тогда можно определение и с примером?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MAKCim
Дата 4.7.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Rickert @  4.7.2007,  04:17 Найти цитируемый пост)
Я всегда считал, что например &s - ссылка на s. Разве нет? Тогда можно определение и с примером?

Цитата

8.3.2
In a declaration T D where D has form
    & D1
and the type of the identifer in the declaration T D1 is "derived-declarator-type-list T", then the type of the identifer of D is "derived-declarator-type-list reference to T"



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 4.7.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Rickert @ 4.7.2007,  04:17)
Я всегда считал, что например &s - ссылка на s. Разве нет? Тогда можно определение и с примером?

Код
int *t = &s; // t - это указатель на s, в данном случае в правой части операция получения адреса переменной
int &x = s; // x - это ссылка на s
*t = 10;   // помещаем в переменную, на которую указывает t, число 10
assert(x == 10); // всегда истина

PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.