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

Подскажите хорошую статью про указатели и ссылки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить алгоритм и схему программы для нахождения суммы положительных значений http://www.cyberforum.ru/cpp-beginners/thread1182039.html
Составить алгоритм и схему программы для нахождения суммы положительных значений последовательности, содержащей 220 произвольных членов Очень прошу, нужна помощь !!!!
C++ Вычислить количество точек, находящихся в круге заданного радиуса Помогите Вычислить количество точек с целочисленными координа*тами, находящихся в круге радиуса R (R>0). http://www.cyberforum.ru/cpp-beginners/thread1182029.html
Не отрабатывает программа C++
Помогите пожалуйста разобраться. Код по идее правильный, программа запускается, но почему то не считает цикл. #include <iostream> using namespace std; int main() { setlocale (LC_ALL,...
C++ Определить сумму цифр целой части вещественного числа (файлы)
Дан файл, содержащий n вещественных чисел. Определить для каждого из этих чисел сумму цифр целой части и поместить результат построчно в файл. Осуществить проверку содержимого файлов. Помогите...
C++ Определить, пересекаются ли прямоугольники, заданные координатами своих углов http://www.cyberforum.ru/cpp-beginners/thread1182004.html
Нужна еще помощь, буду благодарен. На с++ обязательно Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего...
C++ Вписывать конструктор второй раз полностью или вызвать его class music { public: string TrackName; float length; string legality; int year; music() { TrackName="---"; подробнее

Показать сообщение отдельно
Denis_Zurin
3 / 3 / 8
Регистрация: 19.05.2014
Сообщений: 84
20.05.2014, 14:45
Указатель - это адрес переменной или функции, место, где оно находится в памяти компьютера. Ряд структур данных (списки, деревья и т.д.) требуют указатели. Например, в однонаправленном списке нужно хранить данные текущего элемента и адрес следующего элемента:
C
1
2
3
4
5
typedef struct tagList
{
  int x;
  struct tagList *next;
} List;
Объявление TYPE* обозначает указатель на тип TYPE. Такое же обозначение используется и для массивов. Массив в C/C++ является указателем на несколько последовательно идущих элементов. Для массивов дополнительно поддерживается арифметика указателей - если указатель указывает на элемент массива, то с помощью операций ++/--/+=/-= можно переходить к следующим и предыдущим элементам.

Операция &varname возвращает адрес переменной, который можно записать в указатель. Для массивов и функций & не нужно, достаточно просто указать имя (а вот для структур - нужно). Операция *ptr позволяет получить доступ к значению по адресу, который хранится в указателе ptr. Например:
C
1
2
3
4
5
6
int n = 2, m = 3;
int *p;
p = &n;
*p = 200;
p = &m;
*p = 300;
Для указателей на функции используется такой синтаксис:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// указатель на функцию, принимающую (int x, int y) и возвращающую int.
int (*pfunc)(int x, int y);
// функция
int summ(int x, int y)
{
  return x + y;
}
void main()
{
  // установить указатель на функцию
  pfunc = summ;
  // вызываем функцию, хранящуюся в указателе ptr
  printf("%d", pfunc(2, 3));
}
В Си указатели можно использовать, когда нужно передать параметры в функцию не по значению, а по ссылке (аналог var-параметров в Паскале и ref/out в C#). Т.е. функция может изменять их значения. Пример - функция, меняющая значения двух переменных целого типа:
C
1
2
3
4
5
6
void swap(int *x, int *y)
{
  int temp = *x;
  *x = *y;
  *y = temp;
}
Вызывается функция так: swap(&n, &m);
В C++ добавили синтаксический сахар для таких параметров-указателей и назвали это ссылками. С помощью ссылок функцию swap можно записать так:
C
1
2
3
4
5
6
void swap(int &x, int &y)
{
  int temp = x;
  x = y;
  y = temp;
}
И вызывать как обычно: swap(n, m);
Т.е. это передача параметров по ссылке, как var в Паскале. Обычно используется для параметров-объектов.
Если остались еще вопросы - см. учебники (Кернигана и Ритчи по Си, и Страуструпа по C++).
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru