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

Поиск:

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


Новичок



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

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



вообщем есть это:

Код

char x[] = "fly";
char y[] = "!=";
char z[] = "elephant";

char *ptr[] = { x, y, z };


как имея доступ только к ptr узнать адреса x, y и z? иначе говоря нужно получить из ptr аналог &x, &y и &z.

извинте, понимаю вопрос глупый, но я очень крепко сел на мель и без пинка сняться не получится  smile 
PM MAIL   Вверх
bsa
Дата 14.7.2013, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



x -> p[0]
y -> p[1]
z -> p[2]
PM   Вверх
trupca
Дата 14.7.2013, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @ 14.7.2013,  21:58)

x -> p[0]
y -> p[1]
z -> p[2]

нафиг мне смещение?
я вот что писал:
как имея доступ только к ptr узнать адреса x, y и z? иначе говоря нужно получить из ptr аналог &x, &y и &z.

на всякий случай оставлю это здесь.
адресом люди обычно называют место расположения объекта в памяти. вот пример адреса где хранится x: 0x7fff08679208.

Добавлено через 3 минуты и 21 секунду
опять же, на всякий случай, скажу по другому.
как для ptr[0] получить 0x7fff08679208?
PM MAIL   Вверх
bsa
Дата 14.7.2013, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



trupca, а что ты понимаешь под "адресом" массива? адрес переменной, в которой хранится указатель на начало массива или адрес начала массива? Если первое, то ты рискуешь вообще не получить его никогда. А вот если второе (оно и имеет смысл), то мой ответ именно то, что тебе нужно.

Кстати, причем тут смещение? Может тебе стоит почитать книжку про указатели и массивы?
PM   Вверх
Dem_max
Дата 15.7.2013, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 39



Цитата

как для ptr[0] получить 0x7fff08679208?

ptr[0] = 0x7fff08679208;


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
feodorv
Дата 15.7.2013, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 12
Всего: 45



Цитата(trupca @  14.7.2013,  23:21 Найти цитируемый пост)
нафиг мне смещение?

А где здесь смещение?


Цитата(Dem_max @  15.7.2013,  04:56 Найти цитируемый пост)
ptr[0] = 0x7fff08679208; 

Действительно, ну что стоит проверить:
Код

printf( "ptr[0] = %p, x = %p, ptr[1] = %p, y = %p, ptr[2] = %p, z = %p\n", ptr[0], x, ptr[1], y, ptr[2], z);

И задуматься: почему это так?


Цитата(trupca @  14.7.2013,  21:44 Найти цитируемый пост)
нужно получить из ptr аналог &x, &y и &z

Всё таки, из ptr получить значения x, y, z (это переменные со значениями адресов соответствующих массивов) или &x, &y и &z (то есть адреса переменных x, y, z)?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
trupca
Дата 15.7.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



можно переписать так:
если у нас есть строка "x" на которую ссылается указатель (точнее у нас их два - одно это имя этой переменной, а второе это сохранённая копия этого указателя в массиве указателей) то как работая с этим указателем узнать его значение? то есть как узнать местоположение первого элемента массива "x" в памяти работая с ptr?

но уже это неважно. потому что ответ уже был и я его не понял. не понял я его из-за того, что уж слишком полагался на своё знание (о_0) ц++. что было зря - увидев ptr[0] (привет, bsa!) то есть переменную с адресом первого элемента массива "x" из char'ов, ц++ убеждённый в том, что я хочу всенепременно разыменовать данный указатель, в неудержимом порыве энтузиазма печатал на экран си-строку, тогда как моё желание было куда скромнее - мне нужно было распечатать его значение. вот собственно я и понял что же мне нужно... как это сделать? как распечатать значение которое лежит в ptr[0] не прибегая к си-функциям?


PM MAIL   Вверх
volatile
Дата 15.7.2013, 10:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



Цитата(trupca @  15.7.2013,  09:05 Найти цитируемый пост)
как распечатать значение которое лежит в ptr[0] не прибегая к си-функциям?

Код

std::cout << static_cast <void*> (ptr [0]);

PM MAIL   Вверх
akizelokro
Дата 15.7.2013, 10:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

Репутация: 1
Всего: 5



Небось понедельник сегодня? И утро понедельника?

Код

std::cout << ptr[0];



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
volatile
Дата 15.7.2013, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



Цитата(akizelokro @  15.7.2013,  10:27 Найти цитируемый пост)
std::cout << ptr[0];

akizelokro, небольшой совет, читайте сначала вопрос (даже если сегодня и понедельник), а уже потом пишите ответ.

Цитата(trupca @  15.7.2013,  09:05 Найти цитируемый пост)
 в неудержимом порыве энтузиазма печатал на экран си-строку, тогда как моё желание было куда скромнее - мне нужно было распечатать его значение.



Это сообщение отредактировал(а) volatile - 15.7.2013, 10:51
PM MAIL   Вверх
akizelokro
Дата 15.7.2013, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

Репутация: 1
Всего: 5



Цитата(volatile @  15.7.2013,  10:42 Найти цитируемый пост)
akizelokro, небольшой совет, читайте сначала вопрос (даже если сегодня и понедельник), а уже потом пишите ответ.

Цитата(trupca @  15.7.2013,  09:05 Найти цитируемый пост)
но уже это неважно. потому что ответ уже был и я его не понял. не понял я его из-за того, что уж слишком полагался на своё знание (о_0) ц++. что было зря - увидев ptr[0] (привет, bsa!) то есть переменную с адресом первого элемента массива "x" из char'ов, ц++ убеждённый в том, что я хочу всенепременно разыменовать данный указатель, в неудержимом порыве энтузиазма печатал на экран си-строку, тогда как моё желание было куда скромнее - мне нужно было распечатать его значение. вот собственно я и понял что же мне нужно... как это сделать? как распечатать значение которое лежит в ptr[0] не прибегая к си-функциям?


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


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Wuffur
Дата 15.7.2013, 11:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

std::cout << ptr[0];

Вообще-то для указателя нужно указать тип значения по адресу, чтобы печаталось то, что нужно. И в C, и в С++. А так только адрес указателя на первый элемент массива из трёх строк.
Первый элемент массива
Код

std::cout << ptr[0][0];

Адрес
Код

std::cout << &ptr[0];




Это сообщение отредактировал(а) Wuffur - 15.7.2013, 12:01
PM MAIL ICQ   Вверх
feodorv
Дата 15.7.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 12
Всего: 45



Wuffur, всё не то. Решение привёл volatile.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
trupca
Дата 16.7.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всем спасибо. вопрос решён. отдельное спасибо тем кто понял что мне всё таки надо и помог smile 

Это сообщение отредактировал(а) trupca - 16.7.2013, 12:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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