Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
#1

Как получить адрес переменной типа unsigned char? - C++

08.08.2014, 14:12. Просмотров 830. Ответов 6
Метки нет (Все метки)

Всем привет!

Как получить адрес переменной типа unsigned char? Всё ерунда получается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
using namespace std;
 
int main()
{
    
 
    
    unsigned char a = 0x64;
    cout << "a: " << a<< "\n";
    cout << "&a: " << &a<< "\n";
    //cout << "*a: " << *a<< "\n";
    unsigned char * A = (unsigned char*)(void*)&a;
    cout << "A: " << A << "\n";
 
    A=(unsigned char*)&a;
 
    cout << "A: " << A << "\n";
    cout << "*A: " << *A << "\n";
    cout << "&A: " << &A << "\n";
    for (int i=0; i<4;i++)
    {
        cout << "A: " << A[i] << "\n";
    }
 
 
    cout << "\n";
 
    for (int i=0; i<4;i++)
    {
        cout << "A+: " << A+i << "\n";
    }
 
    cout << "\n";
 
    for (int i=0; i<4;i++)
    {
        cout << "*A+: " << *(A+i) << "\n";
    }
 
    int * B = new int;
    int b=0x02020202;
    B=&b;
    cout << "&b: " << &b << "\n";
    cout << "B: " << B << "\n";
 
    A=(unsigned char*)&b;
    cout << "A: " << A << "\n";
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 14:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить адрес переменной типа unsigned char? (C++):

Как задать границу для типа данных unsigned char*? - C++
У меня есть двумерный массив значений типа unsigned char*, диапазон значений которого 0 - 255. Как задать условие, чтобы при увеличении на...

Как присвоить значение одного из элементов массива типа char переменной типа int? - C++
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь что уже искал ответ но на эту тему...

Аргумент типа "unsigned char*" несовместим с параметром типа "const char*" - C++
int f(unsigned char s, unsigned char q) { N = strlen(s); //Ошибка тут... M = strlen(q); //...и тут Как исправить?

Изменить программу для типа unsigned char - C++
Подскажите пожалуйста, что нужно изменить в программе перевода числа, чтобы она правильно работала для введенного числа типа unsigned...

Надо перевести переменную типа unsigned char* в signed int и обратно - C++
у меня есть переменная типа unsigned char*, мне нужно перевести ее в signed int , провести арифметические вычисления и затем перевести ее...

Как сохранить float в переменной типа char? - C++
Всем здрасьте. Как можно записать float в char ? И как потом float вытащить из char, если он будет находится примерно посередине ну или...

6
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
08.08.2014, 14:31 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
unsigned char a = 0x64;//0xFF мах
cout<<a<<endl;
unsigned char *ptr = &a;//это имеет смысл лишь если предполагается доступ к значению разодресацией указателя:
cout<<*ptr<<endl;
//cout<<ptr; //так нельзя char * это строка от Си и ничего хорошего не будет
//можно
cout<<(void*)ptr<<endl;
//или сразу:
void *p = &a;
cout<<p;
cin.get();
return 0;
}
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2014, 14:46 #3
Цитата Сообщение от ioscat Посмотреть сообщение
Как получить адрес переменной типа unsigned char?
Проблема не с получением как таковым, а с выводом на консоль. В данном случае происходит преобразование к типу const char* и интерпретируется как вывод Си-строки. Для вывода адреса в данном случае требуется явное преобразование к типу void*, ну или вывод сишными средствами через printf:
C++
1
2
3
unsigned char uc = 42;
std::cout << static_cast<void*>(&uc) << std::endl;
std::printf( "%p\n", &uc );
1
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,843
Завершенные тесты: 1
08.08.2014, 15:12 #4
Замечание:
Цитата Сообщение от ioscat Посмотреть сообщение
int * B = new int; .// выделили память под переменную
int b=0x02020202;
B=&b;// заменили адрес переменной и, тем самым, потеряли выделенную память!
0
ioscat
1 / 1 / 0
Регистрация: 07.05.2014
Сообщений: 44
08.08.2014, 15:47  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
B=&b;// заменили адрес переменной и, тем самым, потеряли выделенную память!
потеряли = утечка?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
08.08.2014, 15:54 #6
Цитата Сообщение от ioscat Посмотреть сообщение
потеряли = утечка?
Можно считать, что да.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2014, 15:55 #7
Цитата Сообщение от ioscat Посмотреть сообщение
потеряли = утечка?
Да. И заодно совет, не используете одинаковые имена в разных регистрах. Вместо b, B лучше сделать b1, b2 например.
0
08.08.2014, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2014, 15:55
Привет! Вот еще темы с ответами:

Приведение типов unsigned char[2] to unsigned char [64] - C++
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main int main() { SHA1Context sha; uint8_t...

Доступны ли побитовые операции с unsigned char типом (одно-байтовой переменной) без неявного приведения к INT - C++
Отказавшись от bitset мне удалось ускорить работу программы примерно в 2,25 раза Вот её код (ребят cyberforum.ru - не сохраняет оригинал...

Записать адрес переменной произвольного типа в переменную типа int - C++
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16 tNo; uint32 reserv; };

Адрес переменной к типу (char*) - C++
Здравствуйте. Для &quot;запоминания&quot; данных переменных можно использовать сериализацию аля: int i = 12; ofstream f(&quot;text.txt&quot;); ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru