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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 12:50     универсальный указатель #1
Возможно ли сделать универсальный указатель, который будет указывать на переменную любого типа?
Ведь указатель по сути - адрес.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
12.03.2012, 12:54     универсальный указатель #2
Ksan, void*
Ksan
26 / 26 / 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
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
12.03.2012, 13:04     универсальный указатель #4
C++
1
delete (int*) upoint;
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 13:32  [ТС]     универсальный указатель #5
а, да, и можно ли не зная, на какой тип указывает указатель удалить его?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
12.03.2012, 13:33     универсальный указатель #6
нельзя
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 13:36  [ТС]     универсальный указатель #7
Еще один глупый вопрос, что бы не создавать тему:

C++
1
2
3
4
void f(int i[])
{
  
}
Можно ли узнать длину массива?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
12.03.2012, 14:05  [ТС]     универсальный указатель #9
У меня не хочет создавать указатель на флоат. Покажи, как это делается
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
12.03.2012, 14:07     универсальный указатель #10
C++
1
2
3
4
foat value = 3;
float* ptr1 = &value;
// or 
float* ptr2 = new float(3);
Ksan
26 / 26 / 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     универсальный указатель
Еще ссылки по теме:

Почему указатель на указатель объявляется как float **A; C++
Универсальный указатель или универсальный скалярный тип C++
C++ Указатель на указатель и Нарушение прав доступа

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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     универсальный указатель
Ответ Создать тему
Опции темы

Текущее время: 06:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru