Читайте также:
|
|
Указатель - это переменная, содержащая адрес другой переменной. Указатели очень широко используются в языке "C". Так как указатель содержит адрес объекта, это дает возможность "косвенного" доступа к этому объекту через указатель. Для объявления указателя после имени типа ставится *, например,
int *pi; //pi – указатель на переменную целого типа
Существует унарный оператор &, выдающий адрес своего операнда. После выполнения инструкций
int i = ‘0’;
pi = &i;
указатель pi будет содержать адрес переменной i (говорят, что pi ссылается на i). Схема расположения в памяти переменной i и указателя pi, содержащего ее адрес, показана на рис. Целая переменная i занимает два байта памяти, а указатель pi – четыре. Такое количество памяти выделяется под указатели на так называемых 32 –разрядных компьютерах, в которых для формирования адресов используется 4 байта, состоящих из 8 двоичных разрядов – битов.
Унарный оператор * применяется к указателю и выдает объект, на который ссылается данный указатель, например,
*pi = 2; //Теперь i = 2
Иначе говоря, если pi указывает на i, то выражение *pi и i – это одно и то же.
Можно создавать указатели на величины любых типов.
//Программа вычисляет периметр и площадь треугольника по трем его сторонам.
#include <stdio.h> #include <math.h>
/*triangle: вычисление периметра и площади треугольника. Возвращает 1 если треугольник со сторонами a, b, c существует и 0 в противном случае. Периметр и площадь возвращаются из функции через аргументы, имеющие тип указателя. */
int triangle(double a, double b, double c, double *p_perim, double *p_area)
//a, b, c - стороны треугольника
//p_perim - указатель на переменную для периметра, p_area - указатель на переменную для площади
{ double p; //Полупериметр
if(a > b + c || b > a + c || c > a + b) //Проверка существования треугольника
return 0; //Треугольник не существует, выход из функции
p = (a + b + c) / 2;
*p_perim = 2 * p; //Периметр
*p_area = sqrt(p * (p - a)*(p - b)*(p - c));
return 1; }
int main()
{ double r, s, t; //Стороны треугольника
double P, A; //Периметр и площадь
cout << "Введите три стороны треугольника: "; cin >> r >> s >> t;
if (triangle(r, s, t, &P, &A) == 0)
cout << "Такого треугольника не существует\n";
else
cout << "Периметр: " << P << ", площадь: " << A <<"\n";
return 0;}
Дата добавления: 2015-07-08; просмотров: 456 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Макросы. Макросы с параметрами. | | | Указатели и массивы. Адресная арифметика. |