Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102

Получение адреса

24.04.2015, 13:00. Показов 2550. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть следующая строка:

long int array[100];

Что означает, если мы напишем следующее:
(char*)Arr;

Мы получим начало адреса нашего массива?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2015, 13:00
Ответы с готовыми решениями:

Получение IP адреса (Си)
Есть ли функция или библиотека для С для определения своего реального интернет IP адреса? Или может есть сервис?

функция получение ip адреса
какой функцией можно получить в программе на c++ свой ip адресс и можно ли его сменить?

Получение значения из адреса
Я имею адрес DWORD Vehicle = { 0x00B6F5F0 }; он содержит число(я могу узнать его вне кода), мне нужно получить его в переменную value,...

34
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.04.2015, 13:02
Цитата Сообщение от M4753 Посмотреть сообщение
Мы получим начало адреса нашего массива?
нет
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 13:16  [ТС]
А что мы получили тогда?) Если не трудно, можете разъяснить?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.04.2015, 13:27
Цитата Сообщение от M4753 Посмотреть сообщение
А что мы получили тогда?
ошибку компиляции
array это и так адрес начала
C++
1
2
long int array[100];
cout << array;
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 13:54
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ошибку компиляции
Ну ошибки-то не будет. Будет reinterpret-преобразование long int * -> char *.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
24.04.2015, 15:17
DrOffset, на самом деле из сообщения TC не понятно что такое Arr. так как оно не объявлено я и написал что это ошибка.
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 17:04  [ТС]
Спасибо всем за неравнодушность к теме Ошибки не будет, просто суть в следующем: у меня есть функция, которой в качестве параметра нужно передавать начало логического адреса объекта (т.е. мой массив long int). Поэтому хочу понять, что происходит при таком преобразовании.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 17:11
Цитата Сообщение от M4753 Посмотреть сообщение
Поэтому хочу понять, что происходит при таком преобразовании.
Компилятор начинает считать адрес типа А адресом типа Б. Значение адреса при этом не меняется.
1
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 18:32  [ТС]
Спасибо за ответ. Тогда следующий вопрос: в моем случает вместо long int имею тип float, что первый тип - 4 байта, что и второй. Т.е. такое преобразование тоже логично. Ситуация следующая:

имею:
vector<float> arr;

Каким образом я смогу применить преобразование (char*).
(char*) arr понятно, что не могу так написать. Как логичнее будет? Просто я уже и & и * куда только не приписывала.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 18:49
Цитата Сообщение от M4753 Посмотреть сообщение
Каким образом я смогу применить преобразование
Лучше вообще ничего не применять, если нет понимания как, что и зачем.
Почему нельзя остаться в рамках оригинальной типизации?
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 18:52  [ТС]
Иного выхода просто нет, ладно, спасибо за помощь, попробую разобраться лучше
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 18:59
Цитата Сообщение от M4753 Посмотреть сообщение
Иного выхода просто нет, ладно, спасибо за помощь, попробую разобраться лучше
Может начнем с того, что опишем задачу, которую надо решить?
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 19:06  [ТС]
Хорошо, код следующий:

C++
1
2
3
4
5
6
7
8
vector<char> tmp_buffer;
char* p_tmp_buffer = &tmp_buffer[0];
 
// Здесь вызывается функция fun (p_tmp_buffer, ...);
 
int* p = reinterpret_cast<int*>(p_tmp_buffer);
int x = p[w * j + i];
buffer[w * j + i] = x;
Это что выполняется ДО. После, мне нужно как-бы проделать обратную процедуру: на входе имею тот самый vector<float>buffer. А функция, в которую мне нужно передать значение, первым параметром принимает char * bits. В документации написано, что данный параметр - это адрес логического начала выводимого участка.

Просто первый раз столкнулась с работой с памятью. Буду рада помощи
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 19:13
Лучший ответ Сообщение было отмечено M4753 как решение

Решение

Цитата Сообщение от M4753 Посмотреть сообщение
А функция, в которую мне нужно передать значение, первым параметром принимает char * bits. В документации написано, что данный параметр - это адрес логического начала выводимого участка.
Т.е., я правильно понял, что есть некая сторонняя функция, которая принимает указатель char*? И под этим char* подразумевается просто набор произвольных байт?
Ну тогда понятно. С этого надо было начинать
C++
1
2
3
4
5
vector<float> arr;
char* pArr = reinterpret_cast<char*>(&arr[0]);
 
//Если что, размер этой области в байтах вычисляется как
arr.size() * sizeof(float)
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 19:57  [ТС]
Спасибо большое!

Добавлено через 40 минут
Программа компилируется, но результат переменной char * bits - ссылается на пустое место. Хотя должен быть массив.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 20:01
Цитата Сообщение от M4753 Посмотреть сообщение
Программа компилируется, но результат переменной char * bits - ссылается на пустое место. Хотя должен быть массив.
Как это ты поняла?
Может быть больше кода (реального) покажешь?
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 20:14  [ТС]
Строится матрица высот, и в ней значения должны варьировать от минус какого-то реального значения до плюс соответственно. У меня как результат значения равны 1 млн метров. Таких высот в мире вообще нет Я зашла в режим отладки, чтобы посмотреть значения char * bits. Оказалось, что оно равно "". А значения должны быть следующими, например 124, 140, вообще ни как не 1 млн. Вот я сделала предположение, что вдруг из-за преобразования мы куда - то не туда залезли в память.

Добавлено через 3 минуты
Просто тот первый вопрос про long int Arr[100] я взяла из документации. Затем реализовала этот пример. И преобразование (char*) на реальные значения указывали. А здесь...совсем не то, что надо...
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 20:20
Цитата Сообщение от M4753 Посмотреть сообщение
Оказалось, что оно равно ""
Это потому, что отладчик думает, что там строка (char* же). А на деле там float.

Цитата Сообщение от M4753 Посмотреть сообщение
У меня как результат значения равны 1 млн метров.
Вот именно поэтому я тебе выше писал, что нельзя ничего преобразовывать, если не до конца понятно к чему это приведет.

Цитата Сообщение от M4753 Посмотреть сообщение
вдруг из-за преобразования мы куда - то не туда залезли в память.
Память наша. Но float * таким образом нельзя преобразовать к char *, чтобы это прошло без последствий. Если там должна быть именно строка, а не байтовый буфер, то нужно выполнить честное копирование (с преобразованием значений, а не указателей) в строку, с заданным форматом. Затем эту строку уже передать твоей функции.
Итак, если там нужна строка, то каков формат этой строки?

Добавлено через 43 секунды
Цитата Сообщение от M4753 Посмотреть сообщение
А здесь...совсем не то, что надо...
Потому, что float хранится несколько более сложным образом, нежели int

Добавлено через 48 секунд
Цитата Сообщение от M4753 Посмотреть сообщение
Просто тот первый вопрос про long int Arr[100] я взяла из документации.
А можно мне на эту документацию взглянуть хоть?
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 20:23  [ТС]
Как мне отправить документацию?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
24.04.2015, 20:27
Цитата Сообщение от M4753 Посмотреть сообщение
Как мне отправить документацию?
Кнопка "расширенный режим", чуть ниже будет еще одна кнопка "управление вложениями". Дальше, думаю, разберешься
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2015, 20:27
Помогаю со студенческими работами здесь

Получение адреса ячейки из функции
Добрый вечер, уважаемые форумчане! Помогите новичку разобраться с указателями. Есть задачка-разработайте и протестируйте функцию,...

Получение начального адреса процесса
Здравствуйте! Запущен процесс пытаюсь получить его адрес по аналогии с dll модулями MODULEINFO GetModuleInfo(char *szModule) { ...

Получение адреса приложения и последующее задание смещений
Салют, задачей поставил получить адрес приложения и через смещения изменить соответственные значения. Возникли следующие вопросы: 1. Как...

Получение адреса функции (Дизассемблер Code::Blocks)
Привет всем! У меня вопрос. Работаю я в code::blocks 10.05 под minGW. Появилась нужда узнать адрес функции, начал дизассемблировать код,...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru