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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 17:43   #1
Pm@
 
Регистрация: 26.05.2012
Сообщений: 3
Восклицание Указатели в с++!

Приветствую всех! Меня зовут Марк, я учу с++ при помощи книги С.Р. Дэвис "С++ для чайников", остановился на указателях не как не могу понять зачем, для чего они нужны??? Если вы знакомы сними то прошу поподробнее написать про них, немного погуглил что-то нашёл, но, всё равно я их не понимаю! Спасибо!
Pm@ вне форума Ответить с цитированием
Старый 26.05.2012, 17:50   #2
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Я бы посоветовал взять книгу Дейтела 5- ое издание. Можешь дать почту скину.
Есть переменная типа int:
Код:
int a=5;
Указатель это та же переменная, но содержит в себе значение адреса, по которому хранится переменная.

Код:
int *p;
p=&a;
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Стремящийся; 26.05.2012 в 17:55.
Стремящийся вне форума Ответить с цитированием
Старый 26.05.2012, 17:53   #3
Pm@
 
Регистрация: 26.05.2012
Сообщений: 3
По умолчанию

pmapro@mail.ru
Pm@ вне форума Ответить с цитированием
Старый 26.05.2012, 17:59   #4
Pm@
 
Регистрация: 26.05.2012
Сообщений: 3
По умолчанию

Получается что int *p; - это объявление указателя p, p = &a; - теперь переменная p содержит адрес a? Я правильно пояснил? =)
Pm@ вне форума Ответить с цитированием
Старый 26.05.2012, 18:03   #5
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Правильно.
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 27.05.2012, 02:30   #6
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Указатели очень полезны на самом деле. Например есть функция сортирующая динамический массив определенным образом например SortingFunc и необходимо дальше работать с этим массивом в функции main, тут нужны указатели т.к. для продолжения работы с этим массивом нужно функции SortingFunc вернуть указатель на данный массив. Или вот еще пример. Есть функция принимающая в качестве аргумента массив, тут рациональнее использовать указатели, если требуется изменить исходный массив. Так как если ты изменяешь в функции значение указателя то и изменяется сама переменная на которую он указывает. Это освобождает от возврата функции указателя на массив. Ну и также экономит память, т.к. когда передается массив в функцию void Func(int Array[]) то мы работаем с копией массива и программе необходимо выделить память на еще один массив, если мы передаем массив в функцию void Func(int *Array) то мы работаем можно сказать с самим массивов и программе не надо выделять дополнительную память, она выделит память под переменную типа *int. Этот эффект не заметен если массив имеет малый размер,но если массив имеет размерность 10^6 или 10^10. То это становится заметнее. Я сам где то месяц убил для того чтоб их понять
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 27.05.2012, 07:31   #7
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Цитата:
Сообщение от kineziz
т.к. когда передается массив в функцию void Func(int Array[]) то мы работаем с копией массива
Ахахахаха. Садитесь, два.
Код:
#include <iostream>
#include <iterator>

#define SIZE 3

void Func(int Array[]) 
{
	Array[0] = 3;
	Array[1] = 2;
	Array[2] = 1;
}

int main()
{
	int Array[SIZE] = { 1, 2, 3 };
	std::copy(Array, Array + SIZE, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl;
	Func(Array);
	std::copy(Array, Array + SIZE, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl;
	system("pause");
	return 0;
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 27.05.2012, 10:45   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Указатели очень полезны на самом деле.
И опасны для многих даже опытных программистов.
Даже они больше опасны чем полезны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2012, 14:19   #9
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Ну с этим никто не спорит. Но бывает без них не обойтись. Например в динамической памяти
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 27.05.2012, 14:24   #10
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
Ахахахаха. Садитесь, два.
Код:
#include <iostream>
#include <iterator>

#define SIZE 3

void Func(int Array[]) 
{
	Array[0] = 3;
	Array[1] = 2;
	Array[2] = 1;
}

int main()
{
	int Array[SIZE] = { 1, 2, 3 };
	std::copy(Array, Array + SIZE, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl;
	Func(Array);
	std::copy(Array, Array + SIZE, std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl;
	system("pause");
	return 0;
}
Чуть чуть перепутал с переменными =) сори
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# и указатели qwerty3434 Общие вопросы .NET 7 08.03.2012 12:56
указатели Solnze2 Общие вопросы C/C++ 1 21.10.2010 17:32
Указатели @Manya@ Общие вопросы C/C++ 4 17.05.2010 13:53
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39