Форум программистов, компьютерный форум CyberForum.ru

Обязательно ли объявлять переменную для хранения адреса переменной как указатель? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Разборка кода игры http://www.cyberforum.ru/cpp-beginners/thread1170598.html
Здравствуйте, скачал недавно игру, сделанную на с++. Хочу попробовать создать подобную, но не могу разобраться в коде. Могли бы вы закомментировать наиболее сложные моменты в коде, буду премного благодарен. TForm1 *Form1; Graphics::TBitmap*ShipPic; Graphics::TBitmap*InvadersPic; Graphics::TBitmap*BackScreen; TList*Invaders; int InvadersDirect; bool LEFT,RIGHT; float InvadersSpeed; int...
C++ Найти сумму четных элементов массива Пожалуйста помогите, найти сумму четных элементов массива. http://www.cyberforum.ru/cpp-beginners/thread1170591.html
C++ Аналог wctomb
Здравствуйте! Необходим аналог функции wctomb без использования функций библиотеки C\C++ и WinAPI. То есть, конвертация строки wchar_t в char. Помогите пожалуйста с реализацией.
C++ Вывод случайного массива, вылетает программа
Программа генерирует случайный двумерный массив, выводит его в файл, потом читает и выводит на экран из этого файла. При нажатии клавиши 2 в меню программа пишет "Прекращена работа программы". Заранее спасибо за помощь. #include <iostream> //библиотека ввода/вывода #include <windows.h> //установка команд операционной системы #include <fstream> ...
C++ Кодировка чтения файла http://www.cyberforum.ru/cpp-beginners/thread1170552.html
Здравствуйте, форумчане! Возникла небольшая прроблемка.. Читаю данные из файла: #include <iostream> #include <vector> #include <fstream>
C++ Ошибка pow:DOMAIN error в написании функции Бесселя первого рода нулевого порядка Доброго времени суток)) Необходимо записать функцию Бесселя первого рода нулевого порядка. Записала, вроде как, по формуле.. с помощью знакопеременного ряда, но при компиляции пишет: pow: DOMAIN error , может кто-нибудь встречался с похожим, или может я, что упустила в коде?? Заранее спасибо)) int Fkt(int b) { int f = 1; for (int i = 1; i <= b; i++) f *= i; return(f) ; } double... подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.05.2014, 13:23     Обязательно ли объявлять переменную для хранения адреса переменной как указатель?
Цитата Сообщение от WLF Посмотреть сообщение
cout << "Адрес Variable\t\t = " << dec << &Variable << endl;
Для вывода адреса указателя манипуляторы не действуют. Я не совсем корректно выразился в предыдущем сообщении. Но если нужно вывести адрес в десятичном представлении, можно рассмотреть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstdint>
 
int main() {
    
    int i;
    int *p = &i;
    
    std::cout << std::dec << p << std::endl; // Указатель выводится всегда в hex
    std::cout << std::hex << p << std::endl; // т.к. манипулятор действует только на целые типы
 
    // Если преобразовать указатель в целое, то манипуляторы будут действовать
    // Значение (адрес) остаются прежними
    std::cout << std::dec << reinterpret_cast<uintptr_t>(p) << std::endl;
    std::cout << std::showbase << std::hex << reinterpret_cast<uintptr_t>(p) << std::endl;
    
    return 0;
}
http://ideone.com/CCe6XE

Кстати, если нужно преобразовывать значение указателя в целое и обратно, правильным будет именно использование типов uintptr_t/intptr_t, а не просто int, у которого может не хватить разрядности.
Integer types capable of holding object pointers

The following type designates a signed integer type with the property that any valid pointer to void can be converted to this type, then converted back to a pointer to void, and the result will compare equal to the original pointer: intptr_t

The following type designates an unsigned integer type with the property that any valid pointer to void can be converted to this type, then converted back to a pointer to void, and the result will compare equal to the original pointer: uintptr_t
отсюда

Цитата Сообщение от taras atavin Посмотреть сообщение
p=(size_t)(&x);
типа size_t может не хватить для представления адреса. См. первый комментарий к ответу тут.
 
Текущее время: 07:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru