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

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

24.04.2015, 13:00. Показов 2474. Ответов 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.04.2015, 18:49
Цитата Сообщение от M4753 Посмотреть сообщение
Каким образом я смогу применить преобразование
Лучше вообще ничего не применять, если нет понимания как, что и зачем.
Почему нельзя остаться в рамках оригинальной типизации?
0
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
24.04.2015, 18:52  [ТС]
Иного выхода просто нет, ладно, спасибо за помощь, попробую разобраться лучше
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru