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

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

Восстановить пароль Регистрация
 
Andrew->
0 / 0 / 0
Регистрация: 12.01.2010
Сообщений: 20
12.01.2010, 22:30     объясните грамотно как это работает #1
1)int * arr = NULL; и
int * arr = new int[n];(что означает new)
2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2010, 22:30     объясните грамотно как это работает
Посмотрите здесь:

C++ объясните как это работает
C++ Объясните как работает this -> и ->
Объясните как работает программа C++
qsort объясните как работает C++
C++ Объясните как работает код
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 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
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.01.2010, 23:21     объясните грамотно как это работает #5
Цитата Сообщение от Andrew-> Посмотреть сообщение
а здесь есть разница?
1. 0 и NULL одно и тоже.
2. Указатель, не указывающий на конкретную область памяти принято инициализировать NULL.
Rififi
 Аватар для Rififi
2330 / 1045 / 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
3029 / 2350 / 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
2294 / 1664 / 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
2330 / 1045 / 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
2294 / 1664 / 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++ Объясните, как работает программа
Русификация.Работает-супер! Обьяснитте, как это работает? C++
Как это работает? Я хочу спросить как работает C++ и где можно про него почитать C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,152
Записей в блоге: 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     объясните грамотно как это работает
Ответ Создать тему
Опции темы

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