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

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

Войти
Регистрация
Восстановить пароль
 
Andrew->
0 / 0 / 0
Регистрация: 12.01.2010
Сообщений: 20
#1

объясните грамотно как это работает - C++

12.01.2010, 22:30. Просмотров 835. Ответов 12
Метки нет (Все метки)

1)int * arr = NULL; и
int * arr = new int[n];(что означает new)
2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.01.2010, 22:39     объясните грамотно как это работает #2
int*- указатель на тип int. Указывает на область памяти (содержит адрес), в которой могут находится одно целое число или более (массив).
new int[n] - выделяет в динамической памяти блок размером sizeof(int) (обычно 4 байта) * n и возвращает указатель на выделенный блок.
int* arr = NULL; - указатель, не указывающий на конкретную область памяти.
int* arr = new int[n]; - выделяет память, и записывает адрес выделенного блока в переменную arr.
NULL и 0 - одно и тоже.
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
12.01.2010, 22:41     объясните грамотно как это работает #3
Цитата Сообщение от Andrew-> Посмотреть сообщение
int * arr = NULL; и
int * arr = new int[n];
первая строка - объявляешь указатель типа int который не на что не указывает.
вторая - оператором new ты выделяешь память под массив типа int размером n
Если рассматривать обе строки в общем, это необходимо для динамического выделения памяти под массив. Если по простому ты запрашиваешь у пользователя какой хочешь массив (cin>>n) и далее эти две строчки создают его.
Думаю достаточно грамотно))
Andrew->
0 / 0 / 0
Регистрация: 12.01.2010
Сообщений: 20
12.01.2010, 23:19  [ТС]     объясните грамотно как это работает #4
Цитата Сообщение от Andrew-> Посмотреть сообщение
2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0
а здесь есть разница?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.01.2010, 23:21     объясните грамотно как это работает #5
Цитата Сообщение от Andrew-> Посмотреть сообщение
а здесь есть разница?
1. 0 и NULL одно и тоже.
2. Указатель, не указывающий на конкретную область памяти принято инициализировать NULL.
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
13.01.2010, 09:09     объясните грамотно как это работает #6
CyBOSSeR,

1. 0 и NULL одно и тоже.

А теперь - правильный ответ (:

0 - это числовая константа
NULL - это макрос эквивалентный "пустому" указателю. Его значение implementation defined
טאַראַס
7 / 7 / 1
Регистрация: 11.01.2010
Сообщений: 123
13.01.2010, 10:08     объясните грамотно как это работает #7
Цитата Сообщение от Andrew-> Посмотреть сообщение
а здесь есть разница?
Есть. Визуальная при чтении исходника.

Добавлено через 1 минуту
Цитата Сообщение от Rififi Посмотреть сообщение
NULL - это макрос эквивалентный "пустому" указателю. Его значение implementation defined
C++
1
#define NULL 0
Пустому действительно эквивалентно, так как указатель из одних нулей зарезервирован в качестве пустого.
kazak
 Аватар для kazak
3030 / 2351 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.01.2010, 10:46     объясните грамотно как это работает #8
???????, [C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?
טאַראַס
7 / 7 / 1
Регистрация: 11.01.2010
Сообщений: 123
13.01.2010, 10:51     объясните грамотно как это работает #9
Про сигнальные я не знал. Но даже если и так, то для них другой дефайн, а для обычных может быть как у меня. Я просто по не знанию не указал область применения своего макроса.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.01.2010, 13:21     объясните грамотно как это работает #10
Цитата из MSDN.
NULL is the null-pointer value used with many pointer operations and functions. It is equivalent to 0.
Конечно, возможно, это специфично для Microsoft, но тем не менее.
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
14.01.2010, 01:40     объясните грамотно как это работает #11
CyBOSSeR,

Цитата из MSDN.

msdn'ом меня не напугаешь. :gigi:

Цитата из Стандарта.

The macro NULL is an implementation-defined C++ null pointer constant in this International Standard
Конечно, возможно, это специфично для Microsoft, но тем не менее.

А это специфично для всего языка, так что тем более (((:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.01.2010, 02:20     объясните грамотно как это работает #12
Rififi, твоя взяла
Умываю руки...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2010, 09:52     объясните грамотно как это работает
Еще ссылки по теме:

C++ Объясните как работает программа
Объясните как прочесть это? operator>> C++
C++ Объясните, как работает программа
Выполнение операции через получение комбинации символов? Объясните, как это сделано C++
C++ Объясните, на что ругается компилятор, и как это понимать?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17189 / 5443 / 337
Регистрация: 30.03.2009
Сообщений: 14,776
Записей в блоге: 26
14.01.2010, 09:52     объясните грамотно как это работает #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Цитата из MSDN.

Конечно, возможно, это специфично для Microsoft, но тем не менее.
Насколько я понимаю, согласно указанной выдержке из документации, для микрософтовского компилятора и библиотек, установленных под виндой, гарантируется, что значение NULL равно нулю. Но тем не менее вручную значение "0" писать не стОит. Хотя бы потому, что визуально код с NULL понятнее

> 2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0

"int * arr = 0" - заводится указатель и в него записывается ноль
"int * arr = {0}" - В стандартном Си такой конструкции точно нет. Может быть оно есть в каких-то расширениях типа Си-99, но я что-то такого не видел ни разу. Может и вправду можно. Если можно, то это означает, что заводится указатель и в него записывается ссылка на массив из одного элемента, в котором записан ноль. При этом код формально является ошибочным, т.к. инициализаторы в фигурных скобках по семантике являются const объектами, а указатель у нас без const
Yandex
Объявления
14.01.2010, 09:52     объясните грамотно как это работает
Ответ Создать тему
Опции темы

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