2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
1 | |
Получение адреса24.04.2015, 13:00. Показов 2189. Ответов 34
Метки нет (Все метки)
Есть следующая строка:
long int array[100]; Что означает, если мы напишем следующее: (char*)Arr; Мы получим начало адреса нашего массива?
0
|
24.04.2015, 13:00 | |
Ответы с готовыми решениями:
34
Получение IP адреса (Си) функция получение ip адреса Получение значения из адреса Получение адреса ячейки из функции |
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
24.04.2015, 13:02 | 2 |
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 13:16 [ТС] | 3 |
А что мы получили тогда?) Если не трудно, можете разъяснить?
0
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
||||||
24.04.2015, 13:27 | 4 | |||||
ошибку компиляции
array это и так адрес начала
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 13:54 | 5 |
Ну ошибки-то не будет. Будет reinterpret-преобразование long int * -> char *.
0
|
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
24.04.2015, 15:17 | 6 |
DrOffset, на самом деле из сообщения TC не понятно что такое Arr. так как оно не объявлено я и написал что это ошибка.
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 17:04 [ТС] | 7 |
Спасибо всем за неравнодушность к теме Ошибки не будет, просто суть в следующем: у меня есть функция, которой в качестве параметра нужно передавать начало логического адреса объекта (т.е. мой массив long int). Поэтому хочу понять, что происходит при таком преобразовании.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 17:11 | 8 |
Компилятор начинает считать адрес типа А адресом типа Б. Значение адреса при этом не меняется.
1
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 18:32 [ТС] | 9 |
Спасибо за ответ. Тогда следующий вопрос: в моем случает вместо long int имею тип float, что первый тип - 4 байта, что и второй. Т.е. такое преобразование тоже логично. Ситуация следующая:
имею: vector<float> arr; Каким образом я смогу применить преобразование (char*). (char*) arr понятно, что не могу так написать. Как логичнее будет? Просто я уже и & и * куда только не приписывала.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 18:49 | 10 |
Лучше вообще ничего не применять, если нет понимания как, что и зачем.
Почему нельзя остаться в рамках оригинальной типизации?
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 18:52 [ТС] | 11 |
Иного выхода просто нет, ладно, спасибо за помощь, попробую разобраться лучше
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 18:59 | 12 |
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
||||||
24.04.2015, 19:06 [ТС] | 13 | |||||
Хорошо, код следующий:
Просто первый раз столкнулась с работой с памятью. Буду рада помощи
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
24.04.2015, 19:13 | 14 | |||||
Сообщение было отмечено M4753 как решение
Решение
Т.е., я правильно понял, что есть некая сторонняя функция, которая принимает указатель char*? И под этим char* подразумевается просто набор произвольных байт?
Ну тогда понятно. С этого надо было начинать
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 19:57 [ТС] | 15 |
Спасибо большое!
Добавлено через 40 минут Программа компилируется, но результат переменной char * bits - ссылается на пустое место. Хотя должен быть массив.
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 20:01 | 16 |
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 20:14 [ТС] | 17 |
Строится матрица высот, и в ней значения должны варьировать от минус какого-то реального значения до плюс соответственно. У меня как результат значения равны 1 млн метров. Таких высот в мире вообще нет Я зашла в режим отладки, чтобы посмотреть значения char * bits. Оказалось, что оно равно "". А значения должны быть следующими, например 124, 140, вообще ни как не 1 млн. Вот я сделала предположение, что вдруг из-за преобразования мы куда - то не туда залезли в память.
Добавлено через 3 минуты Просто тот первый вопрос про long int Arr[100] я взяла из документации. Затем реализовала этот пример. И преобразование (char*) на реальные значения указывали. А здесь...совсем не то, что надо...
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 20:20 | 18 |
Это потому, что отладчик думает, что там строка (char* же). А на деле там float.
Вот именно поэтому я тебе выше писал, что нельзя ничего преобразовывать, если не до конца понятно к чему это приведет. Память наша. Но float * таким образом нельзя преобразовать к char *, чтобы это прошло без последствий. Если там должна быть именно строка, а не байтовый буфер, то нужно выполнить честное копирование (с преобразованием значений, а не указателей) в строку, с заданным форматом. Затем эту строку уже передать твоей функции. Итак, если там нужна строка, то каков формат этой строки? Добавлено через 43 секунды Потому, что float хранится несколько более сложным образом, нежели int Добавлено через 48 секунд А можно мне на эту документацию взглянуть хоть?
0
|
2 / 2 / 0
Регистрация: 24.04.2015
Сообщений: 102
|
|
24.04.2015, 20:23 [ТС] | 19 |
Как мне отправить документацию?
0
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
|
24.04.2015, 20:27 | 20 |
Кнопка "расширенный режим", чуть ниже будет еще одна кнопка "управление вложениями". Дальше, думаю, разберешься
0
|
24.04.2015, 20:27 | |
24.04.2015, 20:27 | |
Помогаю со студенческими работами здесь
20
Получение начального адреса процесса Получение адреса приложения и последующее задание смещений Получение адреса функции (Дизассемблер Code::Blocks) Получение адреса объекта после обнуления указателя на этот объект Почему при присваивании адреса массива не ставится знак '&' получения адреса 1. Ввести символьный массив. Найти адреса всех парных его элементов. 2. Вывести адреса элементов массива 4 на 4, находящ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |