Форум программистов, компьютерный форум 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, "russian"); int a, b; cout<<"Введите A ";cin>>a; cout<<"Введите В (B<A) ";cin>>b;
C++ Определить сумму цифр целой части вещественного числа (файлы)
Дан файл, содержащий n вещественных чисел. Определить для каждого из этих чисел сумму цифр целой части и поместить результат построчно в файл. Осуществить проверку содержимого файлов. Помогите кто нибудь с задачей!!
C++ Определить, пересекаются ли прямоугольники, заданные координатами своих углов http://www.cyberforum.ru/cpp-beginners/thread1182004.html
Нужна еще помощь, буду благодарен. На с++ обязательно Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего и правого нижнего углов. Для первого прямоугольника это точки (x1,y1) и (х2, 0), для второго — (x3, y3) и (х4,0)- Составить программу, определяющую, пересекаются ли данные прямоугольники, и...
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++).
 
Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru