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

NULL с указателями

26.12.2017, 17:50. Показов 1883. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С понятием NULL столкнулся только что при изучении указателей. Поэтому еще не понимаю зачем он нужен и "с чем его едят".
В коде, который дан ниже, его используют в создании динамического массива, и я не понимаю зачем. Объясните пожалуйста что с ним происходит с указателем ptr который равен NULL. Я уже не раз встречался с динамическими массивами и для его создания использовалось следующее --> int *p = new int[10]; и ни какого NULL.

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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int amount = 0;
    int *ptr = NULL;
 
    cout << "Введите количество элементов: ";
    cin >> amount;
 
    ptr = new int[amount];
 
    for (int i = 0; i< amount; i++)
    {
        ptr[i] = rand() % 100;
        cout << ptr[i] << "\t";
    }
 
    cout << "\n\n";
 
    delete [] ptr;
 
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2017, 17:50
Ответы с готовыми решениями:

Что использовать с указателями? 0, NULL, nullptr?
NULL в WinDef.h описан как #define NULL 0. То есть в случае использования как с указателями, так и другими переменными разницы 0. Про...

Блин, для ЧЕГО НУЖНА Функция CREATE TABLE invoice( inv_id INT AUTO_INCREMENT NOT NULL , usr_id INT NOT NULL , prod_id INT NOT NULL , quantity INT NOT
Погуглив, так и не смог толком понять. Есть тут ГУРУ по mysql Которые могут на пальцах или на примере показать для чего она нужна. ...

Не работает код: m_web1.Navigate ('gidro.htm',0,0,NULL,NULL);
Друзья помогите начинаюшему значит делаю m_web1.Navigate ('с:\gidro.htm',0,0,NULL,NULL);работает делаю m_web1.Navigate...

3
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
26.12.2017, 18:12
Лучший ответ Сообщение было отмечено Zalj как решение

Решение

Zalj, NULL (в новых стандартах есть ключевое слово nullptr) - это указатель, имеющий значение 0x0. Используется там, где нужно указать на отсутствие значения. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
// Вернёт указатель на макс. нечётный элемент или NULL, если такого нет
int *maxOddElement(int* array, size_t size) 
{
      int *res = nullptr;
      for(size_t i = 0; i < size; ++i)
           if(array[i] % 2 == 1) {
                if(!res || *res < array[i]) // !res <=> res == nullptr, *res < array[i] выполнится только при res != nullptr
                    res = array + i;
           }
     return res;     
}
Также delete, применённый к NULL, ничего не делает.
В вашем случае NULL - это скорее дурной тон, ибо по-хорошему объявлять и инициализировать переменные стоит на месте их использования:
C++
1
2
3
4
5
 int amount = 0;
 cout << "Введите количество элементов: ";
 cin >> amount;
 
  int *ptr  = new int[amount];
1
2 / 2 / 1
Регистрация: 08.07.2017
Сообщений: 32
26.12.2017, 18:20  [ТС]
Я делал это по видео уроку "Динамические массивы" и дальше этот код превратили в это:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
void allocArray(int* &p, int n);//int *p = ptr;
 
void releaseArray(int* &p);
 
void initArray(int* &p, int amount);
 
void showArray(int* &p, int amount);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int amount = 5;
    int *ptr = NULL;
 
    //cout << "Введите количество элементов: ";
    //cin >> amount;
 
    while (true)
    {
        allocArray(ptr, amount);
 
        initArray(ptr, amount);
 
        showArray(ptr, amount);
 
        releaseArray(ptr);
    }
 
    system("pause");
    return 0;
}
 
void allocArray(int* &p, int n)
{
    p = new int[n];
}
 
void releaseArray(int* &p)
{
    if (p)
    {
        delete[] p, p =NULL;
    }
}
 
void initArray(int* &p, int amount)
{
    for (int i = 0; i < amount; i++)
    {
        p[i] = rand() % 100;
    }
}
 
void showArray(int* &p, int amount)
{
    for (int i = 0; i < amount; i++)
    {
        cout << p[i] << "\t";
    }
    cout << "\n\n";
}
Имеет ли NULL здесь какое то особое значение или же стоит успокоится на том что хватило бы
C++
1
int *ptr  = new int[amount];
вместо
C++
1
2
 int *ptr = NULL;
ptr = new int[amount];
0
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
26.12.2017, 18:31
Лучший ответ Сообщение было отмечено Zalj как решение

Решение

Zalj, не имеет.
C++
1
2
3
4
5
6
7
void releaseArray(int* &p)
{
    if (p)
    {
        delete[] p, p =NULL;
    }
}
Проверка излишняя, delete и так проверяет на null. Занулять указатель после удаления, в целом, хорошая практика, но в данном случае у нее нет использования.
Складывается впечатление, будто автор курса считает, что в случае неудачного new, p присваивается null, но на деле там будет исключение std::bad_alloc, которое в программе не обрабатывается и поэтому она просто прекратит работу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2017, 18:31
Помогаю со студенческими работами здесь

UPDATE SELECT, ERROR: null value in column violates not-null constraint
Здравствуйте. Две таблицы, из одной значением integer модифицируется int другой таблицы. В таблице-приёмнике ограничение NOT NULL. ...

XML. Как мне добится того, чтоб в списке было 1, NULL, NULL, 4?
Есть следующий кусочек XML файла: &lt;root&gt; &lt;row&gt; &lt;cell&gt;&lt;data&gt;1&lt;/data&gt;&lt;/cell&gt; &lt;cell&gt;&lt;data&gt;2&lt;/data&gt;&lt;/cell&gt; ...

Сервер отправляет объект не null, а клиент принимает null
Помогите пожалуйста! У меня в клиент-серверном приложении творится что-то странное! Короче с сервера на клиент посылается задача, но на...

Почему в столбцах NOT NULL по умолчанию NULL ?
Добрых суток! Не могу понять такую вещь. Создаю столбцы и не пишу NOT NULL. В таком случае по умолчанию значения NULL. Но, даже,...

Как NULL поменять на NOT NULL?
Добрый день! Как можно столбец с заданным NULL поменять на NOT NULL или наоборот? Пример ниже не работает alter table tv change...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru