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

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

Войти
Регистрация
Восстановить пароль
 
Mger
1 / 1 / 0
Регистрация: 24.04.2013
Сообщений: 27
#1

Разница между объявлениями указателя - C++

28.03.2014, 21:16. Просмотров 241. Ответов 2
Метки нет (Все метки)

Часто вижу, при создании объекта класса, создают указатель на объект

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
class Rectangle {
public:
    int width, height;
};
int main()
{
     Rectangle  *a;
     
     return 0;
}
или
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
class Rectangle {
public:
    int width, height;
};
int main()
{
     Rectangle  *a=new int;
     
     return 0;
}
зачем создать указатель ?

И какая разница между
C++
1
int *p;
и
C++
1
int *p=new int;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2014, 21:16     Разница между объявлениями указателя
Посмотрите здесь:

C++ Различные варианты инициализации указателя - в чём точная разница между ними?
Разница между i++ и ++i.Си C++
C++ Разница между 0 и 00 ?
C++ Разница между != и <=
C++ Разница между объявлениями const Person p1 и Person const p1
Разница между объявлениями указателей C++
В чем разница массива и указателя в данной ситуации? C++
C++ разница между указатель на функцию и функция возврата указателя?
C++ Указатели на массивы: В чем принципиальное различие между объявлениями указателей?
C++ Какая разница между разными объявлениями объектов?
Разница между if else и else if C++
Объяснить разницу между объявлениями массивов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
28.03.2014, 21:31     Разница между объявлениями указателя #2
C++
1
Rectangle  *a = new Rectangle;
оператор new - выделяет память.

После удачного выполнения такой операции, в оперативной памяти компьютера происходит выделение диапазона ячеек, необходимого для хранения переменной заданного типа.

Также указатель может указывать на другой объект класса.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    int var = 123; // инициализация переменной var числом 123
    int *ptrvar = &var; // указатель на переменную var (присвоили адрес переменной указателю)
 
    std::cout << "&var    = " << &var << std::endl;// адрес переменной var содержащийся в памяти, извлечённый операцией взятия адреса
    std::cout << "ptrvar  = " << ptrvar << std::endl;// адрес переменной var, является значением указателя ptrvar
    std::cout << "var     = " << var << std::endl; // значение в переменной var
    std::cout << "*ptrvar = " << *ptrvar << std::endl; // вывод значения содержащегося в переменной var через указатель, операцией разименования указателя
 
    return 0;
}
Результат работы:

Код
&var    = 0x22ff08
ptrvar  = 0x22ff08
var     = 123
*ptrvar = 123
Пример работы с указателями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    std::cout << "Enter massive size: ";
 
    size_t size;
    std::cin >> size;
 
    int* mas = new int[size];
 
    for(size_t i = 0; i < size; ++i)
        mas[i] = rand();
 
    for(size_t i = 0; i < size; ++i)
        std::cout << mas[i] << ' ';
 
    std::cout << std::endl;
 
    return 0;
}
Мы выделяем заданное количество памяти под массив и производим над ним операции.
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,710
Записей в блоге: 2
Завершенные тесты: 1
28.03.2014, 22:17     Разница между объявлениями указателя #3
Цитата Сообщение от Mger Посмотреть сообщение
И какая разница между
такая же как между
C++
1
int x ;
и
C++
1
int x = 666 ;
Yandex
Объявления
28.03.2014, 22:17     Разница между объявлениями указателя
Ответ Создать тему
Опции темы

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