С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/88: Рейтинг темы: голосов - 88, средняя оценка - 4.99
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
1

NULL или проверка инициализации

07.03.2015, 23:26. Показов 16695. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть функция которая возвращает число... если выполнилось условие, в обратном случае NULL, или ничего(можно и так) . Проблема в том, что я читал что NULL не совпадает ни с одним числом и значением в программе, наверно обманули... Потому что NULL == 0;

Вобщем код был таким if(x != NULL ){...}

А мне возвращало NULL как 0 и я долго думал почему не работает. Так вот чем бы таки заменить NULL, что бы можно было провести такую проверку???. Может есть ли какая нибудь "пустая переменная" типа int x - "пустая".??

Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2015, 23:26
Ответы с готовыми решениями:

Указатель при инициализации не равен NULL
Здравия желаю!:) myClass myClass::operator=(myClass iniOb) { char *temp; //Указатель на копию...

Проверка на NULL строки типа Int
Добрый день! в С++ можно сказать второй день Нужно после совершения действий выводить данные что...

Что быстрее, проверка на null, или проверка на тип перечисления в запросе?
вопрос такой. если несколько таблиц. сходных по структуре в запросе. в первой таблице ...

Проверка на 0 или NULL
Читаю SQL для простых смертный. В конце каждого параграфа небольшие задачки, одна из них звучит...

24
Модератор
Эксперт С++
13706 / 10909 / 6473
Регистрация: 18.12.2011
Сообщений: 29,125
07.03.2015, 23:31 2
NULL - это абстракция
C++
1
#define NULL 0
Используется просто, чтобы подчеркнуть, что это все-таки указатель.
1
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
07.03.2015, 23:35  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
NULL - это абстракция
Так что мне теперь использовать? Потому что приходится сидеть и говнокодить, а не хочется, с моим опытом и так код не очень хороший, а тут еще и такое.
0
Модератор
Эксперт С++
13706 / 10909 / 6473
Регистрация: 18.12.2011
Сообщений: 29,125
07.03.2015, 23:40 4
Цитата Сообщение от _Valera_ Посмотреть сообщение
NULL не совпадает ни с одним числом
Поскольку предполагается сравнение указателей, то все резонно,
нулевой указатель означает, что он реально ничего дельного не адресует.
Так что, Ваши беспокойства напрасны.
1
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
08.03.2015, 00:02  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
Поскольку предполагается сравнение указателей, то все резонно,
Нет, все равно не работает с нулем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include "vector"
using namespace std;
int main()
{
    vector<int>A(10);
 
    for(int i=0;i<A.size();++i)
    {
        if(i!=NULL)cout<<i<<endl;
    }
    system("PAUSE");
    return 0;
}
вот программа выведет от 1 до 9, а ноль нет, а мне надо что б ноль тоже выводило
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.03.2015, 00:17 6
_Valera_, в С++ техника возвращения нуля возможна лишь для указателей (из встроенных типов). Это значит, что можно лишь при доступе через указатель или класс обёртку, где реализуется обнуляемый тип (nullable).
Последний вариант придётся поровнокодить.
Данный класс содержит значение и булеву переменную вроде is_assigned или is_initiated. Если срабатывает конструктор без параметров такая переменная устанавливается в false. Потом везде проверять... С указателем ведь почти тоже самое.
1
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.03.2015, 00:24 7
Цитата Сообщение от IGPIGP Посмотреть сообщение
Последний вариант придётся поровнокодить.
Все давно уже написано до нас, boost::optional
2
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
08.03.2015, 00:29  [ТС] 8
Цитата Сообщение от IGPIGP Посмотреть сообщение
в С++ техника возвращения нуля возможна лишь для указателей (из встроенных типов). Это значит, что можно лишь при доступе через указатель или класс обёртку, где реализуется обнуляемый тип (nullable).
Не очень понял, можете поровнокодить))) мой код, который выше.

пока я додумался сделать так:
C++
1
#define EMPTY '~'
Так что теперь у меня свой NULL, с блэкджеком и ш....))) Но все же это не очень хорошо так делать....

Добавлено через 1 минуту
Цитата Сообщение от Voivoid Посмотреть сообщение
boost::optional
А библиотека какая?
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.03.2015, 00:31 9
Цитата Сообщение от _Valera_ Посмотреть сообщение
А библиотека какая?
дык, boost
1
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
08.03.2015, 00:31 10
Цитата Сообщение от _Valera_ Посмотреть сообщение
Может есть ли какая нибудь "пустая переменная" типа int x - "пустая".??
нету
нужно свою вводить
например конец тексторого файла раньше был ^Z

Цитата Сообщение от _Valera_ Посмотреть сообщение
#define EMPTY '~'
можно и так
1
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
08.03.2015, 00:35  [ТС] 11
Цитата Сообщение от Voivoid Посмотреть сообщение
дык, boost
Она внешняя, то есть ее к вс подключать надо, скачивать и тд.... ??

Добавлено через 45 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
можно и так
А это не очень плохо ??? Ну в рамках хорошего кода?
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
08.03.2015, 00:40 12
Цитата Сообщение от _Valera_ Посмотреть сообщение
А это не очень плохо ??? Ну в рамках хорошего кода?
Дык все полезно, что в рот полезло
если у тебя не будет колизий, т.е функция однозначно не примет такого значения то почему бы и нет
вот пример который ты приводил
NULL это значит ничего пустота а 0 конкретная цифра
но поскольку указатель не может указывать на адрес 0, то и ввели
C++
1
#define NULL 0
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
08.03.2015, 00:42 13
Цитата Сообщение от _Valera_ Посмотреть сообщение
А это не очень плохо ??? Ну в рамках хорошего кода?
смотри и подумай
C++
1
2
3
4
5
6
7
8
9
10
#define EMPTY '~'
 
int main()
{
    for (int i=125;i<128;i++){
        if (i!=EMPTY) cout<<i<<"\n"; 
    }
 
    return 0;
}
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
08.03.2015, 00:43 14
Цитата Сообщение от _Valera_ Посмотреть сообщение
Она внешняя, то есть ее к вс подключать надо, скачивать и тд.... ??
Да.
1
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.03.2015, 00:45 15
Цитата Сообщение от _Valera_ Посмотреть сообщение
Так вот чем бы таки заменить NULL, что бы можно было провести такую проверку???.
nullptr
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
08.03.2015, 00:47  [ТС] 16
Цитата Сообщение от daslex Посмотреть сообщение
смотри и подумай
Не понял, а почему так получается?
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
08.03.2015, 00:48 17
Цитата Сообщение от hoggy Посмотреть сообщение
nullptr
указатель
а речь то шла о числах
Цитата Сообщение от _Valera_ Посмотреть сообщение
"пустая переменная" типа int x - "пустая"
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
08.03.2015, 00:49 18
_Valera_, потому что тип char хранится как целое число. Т.е. это - число. Любой символ - всего-лишь число. А то, что видно его как символ - это потому что объект cout умеет его так выводить.
0
Модератор
Эксперт по электронике
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,704
08.03.2015, 00:52 19
Цитата Сообщение от _Valera_ Посмотреть сообщение
Не понял, а почему так получается?
а потому что коллизия
твое определение пустоты попадает в диапазон цикла
ты должен выбрать такое число которое точно не будешь использовать
например ты возвращаешь возраст, который точно не может быть отрицательным
значит возвращая отрицательное число, сигнализируешь об ошибке
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
08.03.2015, 00:53  [ТС] 20
Цитата Сообщение от daslex Посмотреть сообщение
Valera_, потому что тип char хранится как int. Т.е. это - число. Любой символ - всего-лишь число. А то, что видно его как символ - это потому что объект cout умеет его так выводить.
Я почитал, віходит что єто побитовая операция

тогда так
C++
1
#define EMPTY ' '
0
08.03.2015, 00:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2015, 00:53
Помогаю со студенческими работами здесь

Особенность де-сериализации или инициализации окна или я не знаю что :)
Есть чек-бос на вторичном окне, с обработчиком с определёнными действиями. С этим чек-боксом...

Проверка на null
Как правильно создать условие. У меня есть строчки кода, которые в переменную apiTokenMy...

Проверка на null
name == null, но не равно null!? Как такое может быть? p.s. со строгим равенством (===) то же самое

Проверка на null
Привет всем. Пишу метод в ктором вызываю ещё методов 5, все они могут вернуть null, надоело везде...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru