Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17

Как узнать, что заданная переменная - это указатель?

21.10.2016, 22:40. Показов 2627. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста - Как узнать что, какая то, переменная это указатель?
Например:

C++
1
int *p = new int;
Как узнать что p - указатель?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2016, 22:40
Ответы с готовыми решениями:

Как узнать что переменная равна -1.#IND
Использую функцию atof(); чтобы преобразовать строку в переменную типа double Но иногда эта функция присваивает переменной double...

Это указатель? На что? Как он работает и соответственно функция?
Программа поиска подстроки в заданной строке. В случае нахождения заданной подстроки необходимо удалить ее. ...

Что значит константный указатель на объект, указатель на константный объект, и как это можно использовать?
Подскажите, что значит константный указатель на объект, указатель на константный объект, и как это можно использовать??

20
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.10.2016, 22:41
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <type_traits>
 
class A {};
 
int main() 
{
    std::cout << std::boolalpha;
    std::cout << std::is_pointer<A>::value << '\n';
    std::cout << std::is_pointer<A *>::value << '\n';
    std::cout << std::is_pointer<A &>::value << '\n';
    std::cout << std::is_pointer<int>::value << '\n';
    std::cout << std::is_pointer<int *>::value << '\n';
    std::cout << std::is_pointer<int **>::value << '\n';
    std::cout << std::is_pointer<int[10]>::value << '\n';
    std::cout << std::is_pointer<std::nullptr_t>::value << '\n';
}
Вывод:
Bash
1
2
3
4
5
6
7
8
false
true
false
false
true
true
false
false
std::is_pointer
2
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 22:48  [ТС]
Спасибо огромное, сейчас буду экспериментировать!)
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.10.2016, 22:57
VLADimir5, а какой у вас компилятор? Просто данный код требует поддержки стандарта 2011-го года.
0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 22:59  [ТС]
Я честно говоря не очень понимаю что имеют ввиду когда спрашивают про компилятор, но я - пользуюсь Visual Studio 2013(v12).
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.10.2016, 23:05
VLADimir5, Visual Studio - это и IDE и компилятор в одном флаконе. На счёт поддержки C++11 не уверен, пробуйте.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:08
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

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
#include <iostream>
using namespace std;
 
template<typename T>
struct IsPointer
{
   enum{ value= false }; 
};
 
template<typename T>
struct IsPointer<T*>
{
   enum{ value= true };
};
 
template <typename T>
bool isPointer(T notused)
{
  return IsPointer<T>::value;
}
 
int main() 
{
    int  v= 10;
    int *p = new int;
    
    std::cout << std::boolalpha;
    std::cout << isPointer(v) <<std::endl;
    std::cout << isPointer(p) <<std::endl;
    
    return 0;
}
http://ideone.com/oGWfN8
2
21.10.2016, 23:11

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
bool isPointer(T notused)
...
C++
1
bool isPointer( T )

0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 23:17  [ТС]
Не мужики, я шо то не впитываю))) расскажу прямо что я пытаюсь сделать - у меня есть переменная date, эта переменная иногда может быть int,double,char и т.д., а иногда она(date) у меня хранит указатель типа класса Actor, тоесть Actor *. И мне вот нужно сделать проверку на подобии такого:
C++
1
2
if(date == указатель){ delete date;}; 
else return;
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:22
Цитата Сообщение от VLADimir5 Посмотреть сообщение
нужно сделать проверку
Во время компиляции? Т.е шаблонами?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
21.10.2016, 23:24
Лучший ответ Сообщение было отмечено VLADimir5 как решение

Решение

VLADimir5, вот:
C++
1
2
3
4
if ( std::is_pointer<date>::value )
    delete date;
else
    return;
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:26
Цитата Сообщение от Avazart Посмотреть сообщение
Во время компиляции? Т.е шаблонами?
Если да используйте специализацию или перегрузку как моем примере выше.
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.10.2016, 23:26
Цитата Сообщение от VLADimir5 Посмотреть сообщение
И мне вот нужно сделать проверку на подобии такого:
Плохая затея. Лучше скажите зачем вам это нужно.
0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 23:32  [ТС]
Avazart, у меня есть список этих актеров
C++
1
LinkedList<Actor *> cast;
LinkedList:
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
#pragma once
template <typename T> struct Node {
    T data;
    Node<T> *next, *prev;
    Node(T data = 0) {
        this->data = data;
        this->next = nullptr;
        this->prev = nullptr;
    }
};
 
template <typename T> class LinkedList {
private:
    Node<T> *head, *tail;
    int length;
public:
    LinkedList();
    LinkedList(LinkedList<T> &list);
    ~LinkedList();
    Node<T>* getHead();
    Node<T>* getTail();
    int getLength() { return length; }
    void addTail(T value);
    void addHead(T value);
    void delHead();
    void delTail();
    void delNode(Node<T> *node);
    void delAll();
    void insertAfterNode(T value, Node<T> *node);
    void insertBeforeNode(T value, Node<T> *node);
    void print();
    void printPref();
    Node<T>* find(T value);
    LinkedList<T> operator=(LinkedList<T> &List);
    LinkedList<T> operator+(LinkedList<T> &list);
    LinkedList<T> operator+=(LinkedList<T> &list);
    bool operator==(LinkedList<T> &list);
    bool operator!=(LinkedList<T> &list);
};

И вооот... Как я говорил, что date(переменная структуры Node) имеет тип int, double, float, char... а иногда как Указатель класса в моём случае это <Actor *>
C++
1
LinkedList<Actor *> cast;
и мне получается нужно сделать в деструкторе LinkedList проверку что если date это указатель который хранит адрес, выделенной ранее динамическую память, то удалить вначале ту выделенную область т.е.

C++
1
delete date;
а потом уже удалять саму структуру Node:

C++
1
2
3
while (head != nullptr){
        delHead();
    }
как это сделать???
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:35
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
#include <iostream>
using namespace std;
 
struct Actor
{
   ~Actor(){ cout<<"~Actor()"<<endl; }  
};
 
// if int,double ...
template <typename T>
void destroy(T)
{
  // do nothing
} 
// else (if pointer) 
void destroy(Actor* pointer)
{
  delete pointer;
}
 
int main() 
{
    int  v= 10;
    Actor* p = new Actor;
    
    destroy(v);
    destroy(p);
    
    return 0;
}
Только еще вероятно стоит рассмотреть случай когда указатель на массив(необходимо вызывать delete[] )
0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 23:36  [ТС]
Оу, спасибо огромное и извените за запару такую))
p.s. пока писал подробно что хочу именно, не видел ответов.....
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:42
Хотя идея передавать списку права владения меня настораживает, вы уверены что это нужно?
0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 23:44  [ТС]
Avazart, вы имеете ввиду что можно было бы лучше передать владение вектору, а не списку?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.10.2016, 23:45
Цитата Сообщение от VLADimir5 Посмотреть сообщение
Avazart, вы имеете ввиду что можно было бы лучше передать владение вектору, а не списку?
Вообще не передавать права владения, как мне кажется это было бы более очевидным и ожидаемым.

Если "пользователь вашего кода" выделил вне списка память, то пусть и удаляет сам его потом вне списка.
0
0 / 0 / 1
Регистрация: 12.12.2015
Сообщений: 17
21.10.2016, 23:52  [ТС]
Avazart, у меня Д.З. такое просто))) Я учусь на 2 курсе и мне нужно написать было LinkedList в классе, что я и сделал, а дома применить его к ранее написанной Видео-базе фильмов IMDb(только раньше я использовал Vector).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.10.2016, 23:52
Помогаю со студенческими работами здесь

Это обьект, переменная или что? Как то вовсе непонятно
Пожалуста, обьясните подробно что такое rhs!! // Функция Add #include &lt;string&gt; #include &lt;iostream&gt; // для объекта cout using...

Как узнать что это за элемент?
Всем привет. Я новечек в программировании и у меня есть вопрос: На картинке что за элемент? Стандартный элемент для visual basic...

Как узнать что это именно страница пользователя?
В моем приложении будет что то похожее на социальную сеть. Значит пользователь регистрируется, и у него появляется страница с его профилем....

Как узнать что это первый запуск приложения?
Здравствуйте. Собственно вопрос в заголовке. Только нужно максимально простое решение, баз данных, без создания дополнительных файлов ....

Как узнать что это за инстансы SQL Server?
Не пойму к каким сервисам относятся эти инстансы (см. аттач). Можно это как-то узнать?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru