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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Nessaj
0 / 0 / 0
Регистрация: 31.07.2009
Сообщений: 18
#1

Использование указателей - C++

02.08.2009, 20:39. Просмотров 1704. Ответов 22
Метки нет (Все метки)

Всем привет, вот изучаю помалу С++. И уже третий час немогу впарится в Указатели недаётся мне это, вот вроде более менее разобрался, скажите правильно нет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 int main()
 {
     int xxx;
     unsigned short int myAge = 5;
     unsigned short int * pAge = NULL;  // a pointer
     pAge=&myAge;
     std::cout << "pAge " << pAge<<"\n"; //Хранится адрес myAge
     std::cout << "*pAge " << *pAge<<"\n"; //Указывает на переменную в myAge
     std::cout << "&pAge " << &pAge<<"\n"; //Показывает свой адрес
     std::cout << "myAge " << myAge<<"\n"; //Показывает свою переменную
     std::cout << "&myAge " << &myAge<<"\n"; //Показывает свой адрес
     std::cin >>xxx;
     return 0;
 
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2009, 20:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Использование указателей (C++):

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. - C++
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...

Использование указателей - C++
Не могли бы вы показать как решить это через указатели. Решение правильное. #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace...

Использование указателей - C++
Здравствуйте, немного не понимаю как правильно использовать указатели, например, я знаю, что при создании указателя на объект класса, можно...

использование указателей - C++
Должна быть разработана программа с меню с использованием указателей: 1. Изменить порядок следования элементов в массиве так, чтобы...

использование указателей - C++
не знал как тему даже назвать :-class CTest { public: int x; void xpp() { x++; } };

использование указателей - C++
Подскажите, пожалуйста, в чем здесь ошибка? #include &lt;iostream&gt; using namespace std; int x = 20; int *x; int main() ...

22
odip
Эксперт С++
7161 / 3223 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.08.2009, 00:35 #16
выделение же памяти в heap - это обращение к опереционной системе!
Не каждое выделение памяти в куче ведет к вызову syscall-ов ОС.
Большей частью достаточно библиотеки с функциями malloc(), free().
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.08.2009, 00:41 #17
Цитата Сообщение от DarKNesS Посмотреть сообщение
Ну таким методом и кучу забить можно я имел ввиду в нормальных условиях при работе с большим объемом данных)
нужно обязательно оценить размер этих данных и сравнить со значением размера стэка по умолчанию. если нет - увеличить. если и увеличивать некуда - обрабатывать данные кусками с хранением на внешнем носителе.
я вам этот примерчик не для наследования привел, а чтобы вы могли за несколько минут удовлетворить наглядно ваше любопытство.
0
DarKNesS
0 / 0 / 0
Регистрация: 28.08.2007
Сообщений: 11
05.08.2009, 00:46 #18
Следует вопрос как его увеличить, ради любопытства, вдруг придется столкнутся с таким.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.08.2009, 00:47 #19
Цитата Сообщение от odip Посмотреть сообщение
Не каждое выделение памяти в куче ведет к вызову syscall-ов ОС.
Большей частью достаточно библиотеки с функциями malloc(), free().
я выразился неточно. конечно, запрос на 4 байта может быть удовлетворен из уже имеющихся выделенных системой блоков, но это все равно выполнение некоторого алгоритма, и, возможно, увеличение фрагментации памяти. стэк же всегда сплошной и всегда "под рукой".
0
odip
Эксперт С++
7161 / 3223 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.08.2009, 00:53 #20
Угу.
Только система не блоки выделяет, а куски непрерывной памяти для адресного пространства процесса.
Блоки там уже функции malloc(), free() нарезают.
Хотя если рассматривать именно физическую память - то конечно будут блоки.
Но процесс вообще не сильно интересует как там ему достается виртуальная память.
Главное чтобы ее по-больше было !

Добавлено через 58 секунд
как его увеличить
А черт его знает.
Может в опциях линкера где.
Скорее стоит вопрос - как его уменьшить если что
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
05.08.2009, 00:55 #21
Цитата Сообщение от DarKNesS Посмотреть сообщение
Следует вопрос как его увеличить, ради любопытства, вдруг придется столкнутся с таким.
VC6->Help->Index->stack sizes->setting
полезно также:
stack space->allocatiing for threads
все это в msdn имеется.

Добавлено через 1 минуту 29 секунд
Цитата Сообщение от odip Посмотреть сообщение
Угу.
Только система не блоки выделяет, а куски непрерывной памяти для адресного пространства процесса.
Блоки там уже функции malloc(), free() нарезают.
если детали хочется узнать, можно, например, здесь:
http://stackoverflow.com/questions/1119134/how-malloc-and-free-work
1
DarKNesS
0 / 0 / 0
Регистрация: 28.08.2007
Сообщений: 11
05.08.2009, 01:08 #22
Цитата Сообщение от novi4ok Посмотреть сообщение
я вам этот примерчик не для наследования привел, а чтобы вы могли за несколько минут удовлетворить наглядно ваше любопытство.
Точнее за несколько долей секунд... Окошко толком появиться не успевает...
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
05.08.2009, 05:28 #23
Цитата Сообщение от DarKNesS
И что они хранятся в куче, а если допустим объявить MyClass mc; то он будет в стеке.
указатель - обычная переменная
в переменной хранятся данные, у данных есть тип, в указателе хранятся данные типа адрес

программа при запуске размещает свои области в физической памяти, которая ей доступна, благодаря системе, а потом генерит свою адресацию

C++
1
2
3
void Core::loadPlugins(QString path)
{
    QDir dir(path);
эта разместит объект dir типа Qdir прямо в функции, он удалится после закрывающей фигурной скобки

C++
1
2
3
void Core::loadPlugins(QString path)
{
    QDir *dir= new QDir(path);
здесь выделится память (система даёт большой кусок памяти программе, и программа может от него отрезать нужное количество), потом адрес этой памяти записывается в локальный указатель (записывается - значит копируется)
после закрывающей фигурной скобки указатель удаляется вместе со своими данными (копией адреса) а память продолжает оставаться выделенной
её надо освободить, а адрес стал неизвестным (то есть он есть, но его никак не узнаешь, надо было сохранять или возвращать или освободить память до закрывающей фигурной скобки)

локальная переменная вместе с её данными существует только во время блока, в котором она создана (объявлена, определена)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2009, 05:28
Привет! Вот еще темы с ответами:

Использование указателей на функции - C++
Составить одну из двух задач с использованием указателя на функцию 1. Составить функцию нахождения корня уравнения f(x)=0 методом...

Код с использование указателей - C++
Переделайте пожалуйста код, что бы в нем использовались указатели В массиве хранится информация о численности книг в каждом из 35...

Использование указателей и функций - C++
Сформировать динамический массив Х размера M × N из случайных целых чисел. В программе организовать функцию для подсчета среднего...

Использование указателей в программах - C++
Тема: «Использование указателей в программах» №5.2 Составить программу, которая вычисляет наибольшие элементы и их порядковые номера...


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

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

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