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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
#1

Объявление переменной - C++

10.10.2009, 20:48. Просмотров 1209. Ответов 13
Метки нет (Все метки)

Два вопроса:

1) Чем отличается запись:
C++
1
int a = 10;
От:
C++
1
int a(10);
2) Что обозначает данная запись:
C++
1
2
int *a = new int (3);
*a = 2;
Мы делаем указатель на переменную и присваиваем ей значение 2? За что тогда отвечает значение 3?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2009, 20:48     Объявление переменной
Посмотрите здесь:

Объявление переменной - C++
Доброго времени суток. Возник вопрос, по какой причине при следующей форме записи, переменные "y" и "z" считаются компилятором (VS12) не...

Объявление переменной - C++
Здравствуйте! В программе есть две формы. Как объявить переменную чтобы она была доступна в обеих формах? Или как переменную из одной...

Условное объявление переменной - C++
Добрый день. Возникла необходимость объявления одного из полей в зависимости от параметров шаблона класса. Нет ли в C++ возможности...

Объявление переменной в цикле - C++
for (int i=0; i!=5; ++i) { int tmp; std::cout << &tmp << std::endl; } Будет ли переменная tmp объявляться при каждой...

Объявление переменной своего типа - C++
Есть код #include <iostream> #include <iomanip> //#include "complexz" using namespace std; int main(){ double a,b,c,d; ...

Объявление переменной внутри цикла while - C++
Доброго времени суток, форумчане. Расскажите нубу, что происходит при объявлении объявленной переменной. Знаю, звучит глупо, посему...

Объявление переменной в цикле - зло? - C++
Во имя читаемости пришлось объявить и инициализировать ссылки на переменные и сами переменные в теле цикла. Преподаватель против такой...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.10.2009, 20:54     Объявление переменной #2
Цитата Сообщение от G-Cat Посмотреть сообщение
2) Что обозначает данная запись:
у тебя здесь вообще ошибка будет. Ты создаешь массив из 3 элементов типа int. Для задания значения конкретной переменной нужно написать
C++
1
a[0] = 2;   // индексация указателя
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
10.10.2009, 20:57  [ТС]     Объявление переменной #3
Это не массив, если бы стояли квадратные скобки, то получился бы динамический массив. Это я знаю.
Препод сегодня сказал что так можно создавать переменные (повторюсь, переменные), я с доски списал, пришёл домой и чёт разобраться не могу, как это работает...
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 20:57     Объявление переменной #4
1) формой записи. компилируется в тот же код
2) а-дурацкий способ создания примитивной переменной.
б-это эквивалент того что и:

C++
1
2
3
int *a = new int ();
*a = 3;
*a = 2;
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.10.2009, 20:59     Объявление переменной #5
G-Cat, создаеться именно массив
C++
1
2
int *a = new int [3];
*a = 2;    // ошибка
Для переменной нужно написать
C++
1
2
int *a = new int;
*a = 2;   // теперь здесь не будет ошибки
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 20:59     Объявление переменной #6
Цитата Сообщение от RazorQ Посмотреть сообщение
у тебя здесь вообще ошибка будет. Ты создаешь массив из 3 элементов типа int. Для задания значения конкретной переменной нужно написать
C++
1
a[0] = 2;   // индексация указателя
Razor, наденьте очки: здесь не создаются массивы создается единственный указатель на целое, затем выделяется память под переменную целого типа, указателю присваивается адрес этой переменной, а ей самой присваивается значение 3. затем этой переменной присваивается значение 2.
RazorQ
10.10.2009, 21:01
  #7

Не по теме:

novi4ok, да пожалуй пора спать

novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 21:03     Объявление переменной #8
Цитата Сообщение от RazorQ Посмотреть сообщение

Не по теме:

novi4ok, да пожалуй пора спать

нет, спать рано, просто очки: скобки там круглые, а не квадратные. я без очков тоже не распознаю
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
10.10.2009, 21:14  [ТС]     Объявление переменной #9
Т.е. я правильно понимаю, что всё таки правильная запись будет:
C++
1
2
int *a = new int;
*a = 2;   // теперь здесь не будет ошибки
В чём приемущества такого вида объявления и присваивания значения переменной?

2 novi4ok:
Я правильно понял, что запись:
C++
1
2
int *a = new int (3);
*a = 2;
означает, что переменной a, через указатель, присваивается значение 3, но указатель хранит адрес этой ячейки памяти. А потом все дружно принимают значение 2?
RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
10.10.2009, 21:16     Объявление переменной #10
Цитата Сообщение от G-Cat Посмотреть сообщение
В чём приемущества такого вида объявления и присваивания значения переменной?
когда переменная больше не будет нужна, её можно будет удалить
C++
1
delete a;
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
10.10.2009, 21:47     Объявление переменной #11
Ффух! Все запутали!
G-Cat, здесь происходит вот что:
C++
1
2
3
4
5
6
7
8
int *a = new int (3); 
// объявлена и создана переменная a типа "указатель на целое". 
// создана _динамическая_ переменная типа int и сразу же инициализирована значением 3. 
// адрес этой переменной присвоен переменной a - а сразу же инициализируется этим адресом. 
 
*a = 2; 
// переменной, на которую указывает a (т.е. нашей динамической переменной целого типа) 
// присвоено значение 2.
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
10.10.2009, 21:50     Объявление переменной #12
Цитата Сообщение от RazorQ Посмотреть сообщение
огда переменная больше не будет нужна, её можно будет удалить
Это не удаление переменной. Это помечание выделенной нами области памяти как свободной , чтобы ОС могла записывать туда данные при надобности. Сама переменная указатель будет существовать как и другая локальная переменная (в своем блоке видимости).
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.10.2009, 14:50     Объявление переменной #13
Цитата Сообщение от G-Cat Посмотреть сообщение
Т.е. я правильно понимаю, что всё таки правильная запись будет:
C++
1
2
int *a = new int;
*a = 2;   // теперь здесь не будет ошибки
В чём приемущества такого вида объявления и присваивания значения переменной?
ни в чем: одни недостатки.
0. переменная-указатель все равно "автоматическая", и занимает столько же памяти, сколько и целая переменная. т.е. мы не экономим память.
1. происходит обращение к процедурам выделения памяти под переменную, на что затрачивается время.
2. память под переменную нужно освободить воизбежание утечки памяти, на что тоже уйдет время.
3. на код, выделяющий и освобождающий память, уйдет памяти на порядок больше, чем "сэкономится" на этой целой переменной.

в общем, такой код нужно выбрасывать сразу и переписывать нормально, чтоб и людЯм, и себе понятно было:

C++
1
int a = 2; // или 3, от цели зависит
и всегда писать так, если позволяют обстоятельства. а фокусы с указателем - только там, где это оправдано.

Цитата Сообщение от G-Cat Посмотреть сообщение
2 novi4ok:
Я правильно понял, что запись:
C++
1
2
int *a = new int (3);
*a = 2;
означает, что переменной a, через указатель, присваивается значение 3, но указатель хранит адрес этой ячейки памяти. А потом все дружно принимают значение 2?
нет, переменной а не присваивается значение 3, т.к. она имеет тип "указатель на целое". ей присваивается значение адреса памяти, выделенного для новой целой переменной. этой переменной сразу после выделения памяти присваивается значение 3. затем ей (новой целой переменной, а не указателю на нее!) присваивается значение 2 (значение переменной "a" при этом не меняется).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2014, 11:42     Объявление переменной
Еще ссылки по теме:

Объявление переменной вне case - C++
Не могу понять что-то не так case R: { .... if ()

Объявление третьей переменной в функции strtok_s - C++
Вот кусок кода: char **context; char *pch = strtok_s(str_text, " ,.", &context); //во втором параметре указаны разделители...

Объявление целочисленной переменной с именем var_i - C++
Требуется написать объявление целочисленной переменной с именем var_i

Объявление переменной, как вводить свои числа - C++
#include <iostream> using namespace std; int main() { double a, b, c, p=(a+b+c)*0.5; cout<<"Ploshchad treugolnika.\n"; ...

Объявление переменной, после ввода её имени с клавиатуры - C++
необходимо, чтобы пользователь имел возможность задавать свои имена переменных. А вообще требуется для создания множества с определённым...


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

Или воспользуйтесь поиском по форуму:
Oxie
Заблокирован
11.05.2014, 11:42     Объявление переменной #14
int a(2) - это инициализация переменной в ANSI C
Yandex
Объявления
11.05.2014, 11:42     Объявление переменной
Ответ Создать тему
Опции темы

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