Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

1)int * arr = NULL; и
int * arr = new int[n];(что означает new)
2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2010, 22:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос объясните грамотно как это работает (C++):

объясните как это работает - C++
#include <iostream> #include <algorithm> using namespace std; long func (long * arr, int length) { return...

Объясните как прочесть это? operator>> - C++
Я только-только начинаю осваивать язык C++, все время возникают вопросы, ответы на которых я кое-как нахожу в пространстве инета. Во многих...

Объясните, на что ругается компилятор, и как это понимать? - C++
Здравствуйте уважаемые форумчане. Изучаю материал "Принципы и практика использования C++" Страуструпа. Остановился на главе "Ошибки". ...

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать - C++
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку для каждого нецелесообразно. Я хочу...

Выполнение операции через получение комбинации символов? Объясните, как это сделано - C++
Полная программа, если нужно. Код нужного log.bat @ECHO OFF PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "&...

Русификация.Работает-супер! Обьяснитте, как это работает? - C++
#include <iostream> #include <conio.h> #include <windows.h> using namespace std; char* Rus(const char* text); int main () ...

12
CyBOSSeR
Эксперт С++
2306 / 1676 / 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 - одно и тоже.
0
breeve
75 / 75 / 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) и далее эти две строчки создают его.
Думаю достаточно грамотно))
0
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
а здесь есть разница?
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.01.2010, 23:21 #5
Цитата Сообщение от Andrew-> Посмотреть сообщение
а здесь есть разница?
1. 0 и NULL одно и тоже.
2. Указатель, не указывающий на конкретную область памяти принято инициализировать NULL.
0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
13.01.2010, 09:09 #6
CyBOSSeR,

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Rififi Посмотреть сообщение
NULL - это макрос эквивалентный "пустому" указателю. Его значение implementation defined
C++
1
#define NULL 0
Пустому действительно эквивалентно, так как указатель из одних нулей зарезервирован в качестве пустого.
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
13.01.2010, 10:46 #8
???????, [C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?
0
טאַראַס
7 / 7 / 1
Регистрация: 11.01.2010
Сообщений: 123
13.01.2010, 10:51 #9
Про сигнальные я не знал. Но даже если и так, то для них другой дефайн, а для обычных может быть как у меня. Я просто по не знанию не указал область применения своего макроса.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 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, но тем не менее.
0
Rififi
2360 / 1053 / 44
Регистрация: 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, но тем не менее.

А это специфично для всего языка, так что тем более (((:
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.01.2010, 02:20 #12
Rififi, твоя взяла
Умываю руки...
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,129
Записей в блоге: 29
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
0
14.01.2010, 09:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2010, 09:52
Привет! Вот еще темы с ответами:

Объясните как работает this -> и -> - C++
Как написано в книжке this - это указатель на экземпляр класса. Что происходит в данных выражениях: 1. i = this -> a -> b -> c; ...

Объясните как работает программа - C++
Если символ: не пробел, не новая строка, не табуляция. То in присваивается no(все слова). Дальше я вообще не понял как программа работает....

Объясните, как работает программа - C++
объясните как работает программа #include <iostream> #include <conio.h> using namespace std; bool Р(int n) { for (int i =...

Объясните как работает программа - C++
Задание звучит так: "Разработать функцию, в которую передаются в качестве аргументов массив типа float и его размер. Функция должна...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.