Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Только лишь для экономии RAM ??? / 9 сообщений из 9, страница 1 из 1
30.09.2003, 08:51
    #32279035
Бобер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
С++
Через год мне понадобиться С++ и поэтому на досуге читаю книжки .
В связи с этим решил посетить Вашу часть форума.
Дошел до указателей и ссылок.
Как я понял указатель это таже переменная, которая указывает на адрес ячейки , где содержится значение обычной переменной.
int simple;
int pS=0;
Указатель можно "нацелить" на другую переменную.
pS=&simple
А ссылка некий псевдоним (хвостик), который лазит все время за переменной.
И если шото сделать со ссылкой, то это отразится на значение переменной. Но ссылку можно присвоить лишь единично.
Механизм ссылок и указателей используется в основном для экономии памяти и для оптимизации быстродействия программы. При работе с объектами классов (особенно с много жрущими объектами) многое делается через ссылки и указатели. Так вот , только ли для экономии мозгов используются ссылки / указатели или еще где то и для чего?
p.s. В с++ я ПОКА чайник.
...
Рейтинг: 0 / 0
30.09.2003, 09:59
    #32279078
YuriAM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
Важная роль указателей являеться еще и их возможность рассматривать область памяти как территория объекта данного типа. Она очень понадобиться при наследовании .
...
Рейтинг: 0 / 0
30.09.2003, 11:53
    #32279269
Бобер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
//Важная роль указателей являеться еще и их возможность рассматривать //область памяти как территория объекта данного типа. Она очень понадобиться //при наследовании .

Ух ты. А по другому как это сказать?
...
Рейтинг: 0 / 0
01.10.2003, 14:08
    #32280756
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
Ни фига себе "только лишь"! Да знаешь ли ты, костями скольких программистов выложена эта самая экономия RAM?? :)

Конечно, в Windows с этим стало попроще, а в DOS -- килобайт 600 в лучшем случае, а дальше хоть трава не расти.

Но это ещё не всё. Если ты хочешь, чтобы какая-нибудь функция что-то сделала с переменной, которую ты ей передашь, то если ты передашь не ссылку и не указатель, а копию, то функция может с этой копией делать что угодно, а твоя переменная от этого не изменится.
...
Рейтинг: 0 / 0
01.10.2003, 14:23
    #32280782
Бобер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
2 Ой Вэй

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

Передача переменных в функцию можно организовать по значению (тогда создаётся копия и это не влияет на саму переменную) и по ссылке (тогда если функция изменит значение переменной,это отразится на переменной в вызывающей программе). Ты это имел ввиду?

У меня башка идет кругом от этих указателей и ссылок.
Щас добрался до возврата функцией нескольких значений.Это можно осуществить через ссылки. Только никак не догоню, а нахрен это надо?
...
Рейтинг: 0 / 0
01.10.2003, 17:42
    #32281107
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
Ты это имел ввиду?
Да, я имел в_виду именно это. Отмечу ещё, что ты можешь передать в функцию указатель (по значению :) ), и тогда сам указатель не изменится (продолжит указывать на ту же адрес в памяти), но ту переменную, на которую он указывает, функция сможет изменить.

Зачем возвращать несколько значений? Не соображу как это сказать в общем виде, вот пример.
Предположим, тебе нужна функция поиска кратчайшего пути на графе, причём сам путь тебе не нужен, а только его длина в метрах (L) и количество звеньев (N).
Тут есть куча вариантов.
1. Функция возвращает N или L в зависимости от ещё одного параметра.
2. Функция возвращает N и меняет переданный по ссылке L.
3. Функция меняет переданные по ссылкам N и L.
Если мы знаем, что такое структура:
4. Функция возвращает структуру с N и L.
5. Функция меняет переданную по ссылке структуру с N и L.

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

Вариант 2 не пройдёт, если тебе понадобится ещё что-нибудь от найденного пути (например, самый маленький диаметр, если речь идёт о трубах -- пройдёт ли там слон. Или кошка.).
Вариант 1 требует двух вызовов одной и той же функции, выполнение которой занимает время (ладно, RAM'a у тебя до фига, но время-то бежит).
А у варианта 3 этих недостатков нет. Возвращай сколько хочешь результатов при только одном вызове функции.

Есть ещё вариант, при котором меняются глобальные переменные, известные и тебе и внутри функции, но это надо делать только когда очень припечёт.
...
Рейтинг: 0 / 0
01.10.2003, 18:00
    #32281128
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
Кстати, в первом посте ты фигню написал:

int simple;
int pS=0;
Указатель можно "нацелить" на другую переменную.
pS=&simple


Если simple -- int, то &simple это int*.

Либо
Код: plaintext
int& pS1 = simple;

либо
Код: plaintext
1.
int* pS2;
pS2 = &simple;

либо
Код: plaintext
int* pS3 = &simple;
...
Рейтинг: 0 / 0
01.10.2003, 19:04
    #32281204
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
Ой Вэй
да ладна тибе. указатель это пачти что инт, может ано даже работать будит,
йэсли кампилятар не шибко умный
...
Рейтинг: 0 / 0
02.10.2003, 09:33
    #32281445
Бобер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Только лишь для экономии RAM ???
2 Ой Вэй
int simple;
int pS=0;
Указатель можно "нацелить" на другую переменную.
pS=&simple

да точно звездочку забыл поставить , вот так надо было
int simple;
int *pS=0;
pS=&simple

несколько вопросов от чайника
Я тренируюсь на компиляторе Borland C++ 3.1 под ДОС. Может быть сразу VC++ взять и на нем тренироваться (тем более на нем и придется писать).
Я уже задавал вопрос этот , но никто толком и не ответил.

Кстати в интернете прочитал, что в недалеком будущем Мелкософт наваяет виндоусы , которые будут работать без всяких API (на другом принципе). Что же станет с API, ему придет кабздеЦ?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Только лишь для экономии RAM ??? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]