Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем разница?? () или [] 
:(
    Опции темы
VLGeorgievich
Дата 8.4.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Вопрос идиотский:
В чем разница между
int *p = new int (100)
             и
int *p = new int [100]

В первом случае при delete [] p возникает ошибка
PM MAIL   Вверх
GoldFinch
Дата 8.4.2009, 19:20 (ссылка)  | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



одни круглые, а другие квадратные
для круглых само-собой нада юзать delete ()

Это сообщение отредактировал(а) GoldFinch - 8.4.2009, 19:20
PM MAIL ICQ   Вверх
zim22
Дата 8.4.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(VLGeorgievich @  8.4.2009,  19:04 Найти цитируемый пост)
int *p = new int (100)             иint *p = new int [100]В первом случае при delete [] p возникает ошибка


delete [] p; применяйте только тогда, когда вы делаете int *p = new int [100]
в противном случае для int *p = new int (100) делайте delete p;

круглые скобки - вы создаёте одну переменную. в скобках вы указываете значение этой переменной.
квадратными -целый массив переменных. значение в скобках квадратных - количество элементов массива.

Это сообщение отредактировал(а) zim22 - 8.4.2009, 19:23


--------------------
PM MAIL   Вверх
Anikmar
Дата 8.4.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(GoldFinch @  8.4.2009,  19:20 Найти цитируемый пост)
одни круглые, а другие квадратные

 smile Крайне содержательный ответ.
И самое главное - абсалютно правильный и честный.  smile 
PM MAIL ICQ   Вверх
azesmcar
Дата 9.4.2009, 19:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



smile

UnrealMan поставил минус zim22 с комментарием
Цитата

Переменные в динамической памяти не создаются

Я минус исправил..но высказатся хочу. Я так думаю наш друг будет отвечать как всегда минусами smile но не важно...и так
Уважаемый UnrealMan. Я не знаю что конкретно вы понимаете под словом "переменная", но у этого слова есть четкое описание - именованная область памяти. И будет ли эта память в HEAP или STACK-е не важно..это переменная! Или в книгах которые вы читали не было заголовков Выделение памяти для динамических переменных или Динамические переменные?

Это сообщение отредактировал(а) azesmcar - 9.4.2009, 20:40
PM   Вверх
UnrealMan
Дата 9.4.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Накладочка вышла в комментарии smile Там больше ста символов не разрешают использовать и редактировать комменты тоже не дают. В общем, комментарий должен быть такой: в данном случае нельзя говорить о создании некоего массива переменных при помощи new, т.к. у каждой переменной должно быть имя, введённое через соответствующее объявление в программе:

Цитата
A variable is introduced by the declaration of an object. The variable’s name denotes the object.

Объект может иметь имя:

Цитата
An object can have a name (clause 3).

но из этого не следует, что любой объект имеет имя и его можно называть переменной. Переменная - это именованный объект. Если объекту не дано имя, то это не переменная.

Цитата(azesmcar @  9.4.2009,  19:28 Найти цитируемый пост)
Я минус исправил..

Накрутил рейтинг != удалил минус. Подменять принятые в языке соглашения своими выдумками неправильно. Если выпороть человека за его графоманию, то через неделю об этом уже никто не вспомнит. А вот минусы - они как-то более на виду. Если кому-то лень искать достоверную информацию и проще объявлять мои оценки ошибочными, то мне тем более лень тратить своё время на изложение фактов в доступном виде. Раньше это ещё имело для меня смысл, т.к. самому помогало в изучении стандарта.

PM MAIL   Вверх
azesmcar
Дата 9.4.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



UnrealMan - Я рад что вы все таки ответили.

Цитата

Накрутил рейтинг != удалил минус

я не сказал - удалил, я сказал исправил.

Цитата

но из этого не следует, что любой объект имеет имя и его можно называть переменной. Переменная - это именованный объект. Если объекту не дано имя, то это не переменная.


Верно, можно создать объект без имени, и да - вы правы это называется просто массив а не массив переменных.
Но не думаете ли вы что одно то что человек назвал это массивом переменных недостаточный повод понижать репутацию?
Допустим у нас есть массив
int a[10];
что такое в этом случае a[0], a[1], a[2] - это элементы массива, тоже что и 0[a], 1[a], 2[a], то же что и a+0, a+1, a+2.
что такое a + 2? - не переменная. Если вдуматся так - то да..но не думаете ли вы что a[2] - в принципе можно назвать переменной, это в каком-то смысле именованный объект. Да или нет, не особо важно, так как вопрос спорный и скорее философический smile (а может лингвистический). Просто назвать это переменной - не преступление и повода для снижения репутации я не вижу. Мое лично мнение.

Цитата

Если кому-то лень искать достоверную информацию и проще объявлять мои оценки ошибочными, то мне тем более лень тратить своё время на изложение фактов в доступном виде. Раньше это ещё имело для меня смысл, т.к. самому помогало в изучении стандарта. 

Вы на меня намекаете? Неужели моя информация была не достоверной? Странно почему тогда вы со мной согласились
Цитата

Накладочка вышла в комментарии 

я отвечал на ваш комментарий.


Это сообщение отредактировал(а) azesmcar - 9.4.2009, 21:09
PM   Вверх
zim22
Дата 9.4.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



вставлю и я свои 5 копеек.
судя по тому, что ТС, как мне показалось, не гуру С++ - я решил как можно проще выразить свои мысли. Если бы я додумался привести аналогию с бананами - я бы их привёл. 
например: переменная - это один банан.  массив - это ящик с бананами. smile
главное - чтобы ТС понял в чём разница. а ссылки на стандарт приводить не всегда уместно.


--------------------
PM MAIL   Вверх
UnrealMan
Дата 9.4.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 5
Всего: 32



Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
a[0], a[1], a[2] - это элементы массива, тоже что и 0[a], 1[a], 2[a], то же что и a+0, a+1, a+2

*(a+0), *(a+1), *(a+2), если быть точнее.

Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
но не думаете ли вы что a[2] - в принципе можно назвать переменной, это в каком-то смысле именованный объект.

Нет, использование имени объекта и вычисление его адреса - это две разные вещи. И если даже мы напишем

Код

int &ref = a[0];

то ref не будет переменной. Вот а - это переменная.

Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
Да или нет, не особо важно, так как вопрос спорный и скорее философический

Спорный для кого? Для сочинителей, которым по барабану терминология?

Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
Просто назвать это переменной - не преступление и повода для снижения репутации я не вижу.

У меня другое мнение на этот счёт.

Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
Вы на меня намекаете?

На всех, кто характеризовывал мои оценки как несправедливые

Цитата(azesmcar @  9.4.2009,  21:04 Найти цитируемый пост)
Неужели моя информация была не достоверной?

Не хватало лишь одного - установления на её основе ошибочности в использовании терминологии (минус был поставлен за это).
PM MAIL   Вверх
azesmcar
Дата 9.4.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

*(a+0), *(a+1), *(a+2), если быть точнее.


а, ну да - точно.
Цитата

Нет, использование имени объекта и вычисление его адреса - это две разные вещи. И если даже мы напишем

ну потому я и сказал - в принципе. т.е. в разговоре.
Цитата

то ref не будет переменной. Вот а - это переменная.

ясно дело, а - это ссылка на переменную.
Цитата

Спорный для кого? Для сочинителей, которым по барабану терминология?

ну да  smile  для тех кого волнует мысль и то что другие ее поняли а не терминология
Цитата

У меня другое мнение на этот счёт.

Это я понял. Я только сказал что повода Я не вижу а не говорил что его нет, а это знаете, дело индивидуальное.
Цитата

На всех, кто характеризовывал мои оценки как несправедливые

ну я конкретну это характеризовал, так как то что было написано в комментах было не совсем верно.
Цитата

Не хватало лишь одного - установления на её основе ошибочности в использовании терминологии

в коментах было написано другое  smile теперь стало понятно что имелось ввиду (хотя я в любом случае не вижу большой беды, но не актуально).

Добавлено через 2 минуты и 28 секунд
Цитата

в данном случае нельзя говорить о создании некоего массива переменных при помощи new, т.к. у каждой переменной должно быть имя, введённое через соответствующее объявление в программе:

с этим комментом согласен smile 
PM   Вверх
C/L
Дата 10.4.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



ИМХО : Переменная - то что изменяет свое значение. Противоположность переменной константа - изменятся не может. Возможность изментять значение основное свойство переменной То что переменная должна иметь имя (опять же ИМХО) имеет второстепенное значение.

Цитата(UnrealMan @  10.4.2009,  01:47 Найти цитируемый пост)
использование имени объекта и вычисление его адреса - это две разные вещи.

Может быть... Но по большому счету и выражение Объект.член_объекта = значение; тоже можно назвать вычислением адреса. Тогда вопрос - члены объектов могут считаться переменными?

Это сообщение отредактировал(а) C/L - 10.4.2009, 01:04
PM MAIL WWW ICQ   Вверх
J0ker
Дата 10.4.2009, 01:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(C/L @  10.4.2009,  01:03 Найти цитируемый пост)
То что переменная должна иметь имя (опять же ИМХО) имеет второстепенное значение.

именно вот из-за таких ИМХО и происходят все безобразия в мире  smile 


--------------------
user posted image
PM MAIL   Вверх
C/L
Дата 10.4.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(J0ker @  10.4.2009,  03:15 Найти цитируемый пост)
именно вот из-за таких ИМХО и происходят все безобразия в мире   

Ну и какие тут могут быть безобразия? Приведите пожалуйста хотя бы одно.
Безобразия происходят от непонимания сущности процессов. Если разночтений в сущности происходящего нет, ничего страшного не произойдет, если мы например назовем массив, созданный new[] - массивом переменных.

Это сообщение отредактировал(а) C/L - 10.4.2009, 02:25
PM MAIL WWW ICQ   Вверх
C/L
Дата 10.4.2009, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: нет
Всего: 1



Цитата(UnrealMan @  9.4.2009,  22:44 Найти цитируемый пост)
Переменная - это именованный объект. Если объекту не дано имя, то это не переменная.


Код

int *a = new int;

Как назвать то, на что будет ссылаться указатель a? У него ведь нет имени, значит оно не может быть переменной???
Цитата

В общем случае, переменная - это
поименованная область памяти.

Как она "поименованна": именем объекта в compile time или указателем и смещением в run time, это уже другой вопрос. Опять же ИМХО, жду возражений с примерми
PM MAIL WWW ICQ   Вверх
and277
Дата 10.4.2009, 06:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Интересную темку подняли... 
Ну а что говрит Вики на этот счет? Процитирую : "Переме́нная в традиционных (императивных) языках программирования — поименованная либо адресуемая иным способом область памяти, имя или адрес которой можно использовать для осуществления доступа к данным, находящимся в переменной (по данному адресу)."

Имхо вики не авторитет, но все же

Это сообщение отредактировал(а) and277 - 10.4.2009, 06:47
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0698 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.