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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

универсальный указатель - C++

12.03.2012, 12:50. Просмотров 1514. Ответов 11
Метки нет (Все метки)

Возможно ли сделать универсальный указатель, который будет указывать на переменную любого типа?
Ведь указатель по сути - адрес.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2012, 12:50     универсальный указатель
Посмотрите здесь:

универсальный указатель - C++
Добрый вечер. Можно ли создать шаблон, что бы не приводить явно универсальный указатель к определенному типу при разыменовании? Или по...

Специализация и обобщение в С++ через универсальный указатель - C++
Здравствуйте, уважаемые участники форума! Возникла следующая проблема. Необходимо написать обобщение, построенное на основе косвенного...

Указатель на указатель заполнение матрицы - C++
Напишите как самому вбивать матрицу скок на скока и каждый элемент в нем (заранее спасибо)!

Указатель на указатель заполнение матрицы - C++
Помогите как самому вбивать матрицу скоко на скоко и элементы этой матрицы ( без функций ) используя только <iostream>. (помощь)

Зачем использовать Указатель на указатель? - C++
Подскажите зачем использовать Указатель на указатель? И как работают двумерные массивы за счет указателей?

Сделать указатель на указатель NULL - C++
есть код: class Matrix { private: double **data; //нужно, чтобы в самом начале это было NULL double *b; //и это тоже было NULL ...

Задача на указатели.Указатель на указатель. - C++
Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали равны 0, а...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 12:54     универсальный указатель #2
Ksan, void*
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 13:02  [ТС]     универсальный указатель #3
C++
1
2
3
void *upoint;
upoint = new int;
delete upoint;
он мне варнинг выдает
C++
1
38 D:\c_Dev\forK\f1.cpp [Warning] deleting `void*' is undefined
в чем соль?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 13:04     универсальный указатель #4
C++
1
delete (int*) upoint;
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 13:32  [ТС]     универсальный указатель #5
а, да, и можно ли не зная, на какой тип указывает указатель удалить его?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 13:33     универсальный указатель #6
нельзя
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 13:36  [ТС]     универсальный указатель #7
Еще один глупый вопрос, что бы не создавать тему:

C++
1
2
3
4
void f(int i[])
{
  
}
Можно ли узнать длину массива?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 13:39     универсальный указатель #8
в общем случае нельзя. Но если массивы будут всегда статическими, то можно узнать размер, используя трюк с шаблонами по размеру массива

C++
1
2
3
4
5
template <size_t n>
void func(int (&static_array)[n])
{
   std::cout << "size = " << n << std::endl;
}
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 14:05  [ТС]     универсальный указатель #9
У меня не хочет создавать указатель на флоат. Покажи, как это делается
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 14:07     универсальный указатель #10
C++
1
2
3
4
foat value = 3;
float* ptr1 = &value;
// or 
float* ptr2 = new float(3);
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 14:09  [ТС]     универсальный указатель #11
Я имел ввиду через void*

я пишу:

C++
1
2
3
4
5
        void *up;
    up = new float;
    up = (void*)(3.14);
    cout << float(up);
    delete (float*)up;
но он выдает ошибку

C++
1
2
67 D:\c_Dev\forK\f1.cpp cannot convert `3.14000000000000012434497875801753252744674682617e+0' from type `double' to type `void*' 
68 D:\c_Dev\forK\f1.cpp pointer value used where a floating point value was expected
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2012, 14:13     универсальный указатель
Еще ссылки по теме:

Указатель на указатель - разница способов - C++
int a =5; int *b = &amp;a; int **e =&amp;b; //первый способ //Нужно писать столько * скока указателей.. int *f = b; //Втрой...

Универсальный стек - C++
Недавно начал изучать C++ по книге Липпмана. В ней рассказывается как создать стек на основе вектора. За тип вектора берётся string. А как...

Универсальный календарь - C++
Требуется программа &quot;универсальный календарь&quot; для расчета дня недели для заданной даты, отображения календаря на неделю, месяц и...

Универсальный шаблон (шапка) - C++
Можно ли как-нибудь сделать , так , чтобы при запуске были прописаны нужные библиотеки и точка задержки экрана. типа того ? ...

Указатель на указатель на функцию - C++
Дан следующий код void f () {} void main() { void (**ppf) (); } Вопрос: какой код следует написать, чтобы...


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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
12.03.2012, 14:13     универсальный указатель #12
Цитата Сообщение от Ksan Посмотреть сообщение
но он выдает ошибку
это потому, что ты присваиваешь значение указателю. А надо области памяти, на которую указывает указатель (не забыв скастовать указатель к нужному типу):
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    void* ptr = new float;
    *(float*) ptr = 3.14;
    std::cout << *(float*) ptr << std::endl;
    delete (float*) ptr;
}
Yandex
Объявления
12.03.2012, 14:13     универсальный указатель
Ответ Создать тему
Опции темы

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