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

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

Войти
Регистрация
Восстановить пароль
 
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
#1

указатели и new - C++

27.02.2013, 20:27. Просмотров 452. Ответов 11
Метки нет (Все метки)

объясните разницу между
C++
1
int *p = new int;
и
C++
1
int *p;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 20:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос указатели и new (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

11
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 445
27.02.2013, 20:48 #2
В первом случае выделяется память под одно целое число и указателю присваивается значение, указывающее на эту выделенную память. Во втором случае просто создаётся указатель. Указывать он может в самые неожиданные места.
0
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 21:01  [ТС] #3
т.е. я могу написать приблизительно следующее:
C++
1
2
int *p = new int;
*p = 10;
и в данном случае число 10 у меня будет храниться в выделенной памяти?
что будет если я напишу:
C++
1
2
int *p;
*p=10;
?
0
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 445
27.02.2013, 21:18 #4
да, в первом случае действительно будет всё в порядке. Второе недопустимо. А вообще говоря, не бойтесь, пробуйте. Синим пламенем вряд ли что-то загорится.
1
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:20 #5
Ничего хорошего (зависит от компилятора). Попытка записать значение в невыделенную память.
0
ITcrusader
Эксперт С++
177 / 163 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:27 #6
Цитата Сообщение от CEBEP Посмотреть сообщение
А вообще говоря, не бойтесь, пробуйте.
Отличный совет новичку.
0
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
27.02.2013, 21:29  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Ничего хорошего (зависит от компилятора). Попытка записать значение в невыделенную память.
т.е. загвоздка в том, что в случае int *p; мы не выделяем память, а просто объявляем пустой указатель?
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:36 #8
Цитата Сообщение от lowlol Посмотреть сообщение
т.е. загвоздка в том, что в случае int *p; мы не выделяем память, а просто объявляем пустой указатель?
Да. Память выделяется под сам указатель. Но под int, на который он должен указывать, нет.
0
ITcrusader
Эксперт С++
177 / 163 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:37 #9
загвоздка в том, что такой подход приведет к неопределенному поведению. А это значит, что твоя программа, может и будет работать. Но однажды она таки сгорит синим пламенем во время выполнения, скорее всего, когда будешь показывать начальству.
1
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:41 #10
Что находится при этом в самом указателе, наверное, зависит от компилятора. Если сделать так:
C++
1
2
3
int *p;
cout << &p << endl;
cout << p << endl;
то студия выдаст это.
1
Миниатюры
указатели и new  
Croessmah
Ушел
13768 / 8018 / 924
Регистрация: 27.09.2012
Сообщений: 19,736
Записей в блоге: 3
Завершенные тесты: 1
27.02.2013, 21:52 #11
Цитата Сообщение от alsav22 Посмотреть сообщение
наверное, зависит от компилятора.
Что было в этой памяти, то и получили.
вот примерчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void foo1(){
    volatile int p=213;
    p*=2;
    std::cout<<p<<std::endl;
}
 
void foo2(){
    volatile int p;
    p*=2;
    std::cout<<p<<std::endl;
}
int main(){
    foo1();
    foo2();
}
Результат у меня в MinGW:
Название: Безымянный.png
Просмотров: 38

Размер: 2.5 Кб
1
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
27.02.2013, 22:07 #12
0xcccccccc - такими значениями забивает неинициализированную память отладчик msvc++.
1
27.02.2013, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 22:07
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Указатели и массивы. Указатели и функции - C++
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...


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

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

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