Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
1

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

08.08.2014, 14:12. Просмотров 1009. Ответов 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*?
У меня есть двумерный массив значений типа unsigned char*, диапазон значений...

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

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

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

Как работать с переменной типа char?
Не понимаю переменную char и как с ней работать.

6
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7092 / 3394 / 461
Регистрация: 04.12.2011
Сообщений: 9,446
Записей в блоге: 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
:)
Эксперт С++
4750 / 3244 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
Модератор
Эксперт С++
7481 / 6850 / 4324
Регистрация: 18.12.2011
Сообщений: 18,119
Завершенные тесты: 1
08.08.2014, 15:12 4
Замечание:
Цитата Сообщение от ioscat Посмотреть сообщение
int * B = new int; .// выделили память под переменную
int b=0x02020202;
B=&b;// заменили адрес переменной и, тем самым, потеряли выделенную память!
0
ioscat
1 / 1 / 1
Регистрация: 07.05.2014
Сообщений: 44
08.08.2014, 15:47  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
B=&b;// заменили адрес переменной и, тем самым, потеряли выделенную память!
потеряли = утечка?
0
Vourhey
Почетный модератор
6493 / 2268 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
08.08.2014, 15:54 6
Цитата Сообщение от ioscat Посмотреть сообщение
потеряли = утечка?
Можно считать, что да.
0
Tulosba
:)
Эксперт С++
4750 / 3244 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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* в signed int и обратно
у меня есть переменная типа unsigned char*, мне нужно перевести ее в signed int...

Как сохранить float в переменной типа char?
Всем здрасьте. Как можно записать float в char ? И как потом float вытащить...

Приведение типов unsigned char[2] to unsigned char [64]
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main...


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

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

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