Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 12:34   #1
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию Указатели(консультация).

Добрый день. Начал изучать C++ по книге Шилдта-Базовый курс С++.
Дошел до указателей. Начало понятно, но потом я запутался. И так вопрос:
Зачем вообще указатели в C++, можно ли без них обойтись дальше или это архиважный материал? И если можно укажите примеры(на словах) где это может использоваться. Спасибо.
[Jank] вне форума Ответить с цитированием
Старый 11.05.2013, 12:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Зачем вообще указатели в C++
Что бы обращаться к ячейкам памяти по адресу.
Цитата:
можно ли без них обойтись дальше
Можно.
Цитата:
укажите примеры(на словах) где это может использоваться.
Примеры указателей? Ты передаешь в функцию массив триллион на триллион. Передается указатель а не делается копия самого массива, экономя память.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 12:51   #3
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Примеры указателей? Ты передаешь в функцию массив триллион на триллион. Передается указатель а не делается копия самого массива, экономя память.
Спасибо. Можно вот этот момент по подробнее?
То есть передается указатель с адресом ячейки (per1 = *per) в которую надо что-то вписать, вместо per = massiv[1000,1000]. Так что ли?

Последний раз редактировалось [Jank]; 11.05.2013 в 12:59.
[Jank] вне форума Ответить с цитированием
Старый 11.05.2013, 13:00   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

При передаче параметров в функцию "по значению" создается временная копия параметра, которая уничтожается после работы этой функции. Вы работаете с копией, а не с самим значением, т.е вы его не меняете. Чтобы копию не создавать применяются указатели или ссылки.
Преимущество указателей состоит в том, что они применяются для работы с динамической памятью (соответсвенно с динамическими структурами данных), далее - передача параметров "по указателю" не создает копию указателя. В функцию передается адрес, содержащийся в указателе, соответсвенно нет смысла создавать копию, а, значит, повышается быстродействие ПО.
Как же быть, если нужно передать параметр по указателю и, при этом, избежать изменения того, на что указывает указатель или сам указатель (адрес). Ответ: для этого применятеся ключевое слово const.
Igor95 вне форума Ответить с цитированием
Старый 11.05.2013, 13:06   #5
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

[Jank], лучше напишите, что именно вам в них не понятно. Я сам сейчас учусь по книге Шилдта, честно говоря, в главе указателей расписано все достаточно подробно.
RussDragon вне форума Ответить с цитированием
Старый 11.05.2013, 14:33   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно вот этот момент по подробнее?
Можно:
http://www.programmersforum.ru/showp...4&postcount=27
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 14:49   #7
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию

Код:
int main(int argc, char* argv[])
{
  int num[10]; //Массив обычный
  int *ipa[10]; // Массив указателей
  int i;

  cout << "\n Massiv NUM \n";

  for(i=1;i<10;i++)  //Заполняем и выводим обычный массив
  {
   num[i]=random(100);
   cout << num[i] <<' ';
  }

  cout << " \n Massiv IPA \n";

  for(i=1;i<10;i++)    //Заполняем и выводим массив указателей
  {
   ipa[i]=&num[i];     //Если i=1, то получается, что первый эллемент массива
                       //указателей принимает значение по адресу 1 элемента обычного массива.
   cout << *ipa[i] <<' ';
  }

  system("pause");
        return 0;
}
Вот я написал программу, правильно ли я понял то что написал в комментарии или нет.
[Jank] вне форума Ответить с цитированием
Старый 11.05.2013, 15:11   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вообще, весь язык С++, построен на указателях. Это его, так скажем, ключевая идеология.
Указатель, это переменная, значение которой равно значению адреса памяти, по которому лежит значение некоторой переменной.
В С++, есть несколько типов указателей *, &, ->.
* - применяется для динамического выделения памяти.
& - применяется для передачи указателей на переменную в функции.
-> - Применяется для обращений к членам класов и структур, ранее объявленных при помощи оператора *.
Например:
TBitmap *bitmap = TBitmap;
Далее обращаемся к членам этого класса как
bitmap->....
Если нам нужно с этой переменной, зделать какие-то действия в посторонней функции, мы делаем так function(&bitmap){}. Т.е. в функцию мы передаём не саму переменную, а адрес памяти, по которому этот bitmap расположен. Ну и дальше работаем с ней, как обычно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.05.2013, 16:08   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Если i == 1, то это второй элемент массива... Нумерация элементов массива начинается с 0
Igor95 вне форума Ответить с цитированием
Старый 11.05.2013, 16:37   #10
[Jank]
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Если i == 1, то это второй элемент массива... Нумерация элементов массива начинается с 0
Да) точно, не с 0 начал)
[Jank] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна консультация Хочу все Помощь студентам 0 19.09.2012 11:54
Нужна консультация! Unamed Работа с сетью в Delphi 4 24.07.2010 13:06
нужна консультация Vogd777 Помощь студентам 2 28.04.2010 09:01
Нужна консультация GSV84 Свободное общение 9 02.02.2010 22:43
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39