Академический Документы
Профессиональный Документы
Культура Документы
Ïñ ¿¿ ºá I SSÑ ÑßÔÓ - 11
Ïñ ¿¿ ºá I SSÑ ÑßÔÓ - 11
Указатели
Пример 1:
int x, – переменная типа int ;
*y; – указатель на объект типа int;
y = &x; – y – адрес переменной x;
*y=1; – косвенная адресация указателем поля x, т.е. по
указанному адресу записать 1: x = 1.
Пример 2:
int i, j=8,k=5, *y;
y=&i;
*y=2; // i=2
y=&j;
*y+=i; // j+=i j=j+i j=j+2=10
y=&k;
k+=*y; // k+=k k=k+k = 10
(*y)++; // k++ k=k+1 = 10+1 = 11
int i,*x;
char *y;
x=&i; // x величина типа int
y=(char *)x; // y величина типа char
y=(char *)&i; // y величина типа char
int a[5];
a
a[0] a[1] a[2] a[3] a[4]
4000 4004 4008 4012 4016
Здесь приведено символическое изображение оперативной
памяти, выделенной компилятором для объявленного
целочисленного массива а[5]. Адрес массива выбирается
компилятором в зависимости от размера доступной памяти,
наличия других переменных и массивов и др. Для конкретности,
здесь положено значение адреса, равное 4000. В реальной
программе вместо 4000 может быть другое значение, но
относительное положение элементов массива всегда остается
постоянным.
В языке С идентификаторы массивов считаются
константными указателями (т.е. в данном примере а "имеет
значение" 4000). Такую константу можно присвоить переменной
типа указатель, но нельзя подвергать преобразованиям, например:
17.8. Ссылка
Ссылка - это не особый тип данных, а "автоматически
разыменуемый" указатель, т.е. это объект, который указывает на
положение другой переменной.
Ссылка - это "неявный" указатель, который отличается от
обычного "явного" указателя тем, что для ссылки не нужно
специально записывать операцию разадресации (она
подразумевается автоматически). Над указателями возможны
арифметические операции. Над самой ссылкой арифметические
операции невозможны (потому что они будут истолкованы
компилятором как операции над тем объектом, на который
ссылается ссылка).
Ссылка декларируется следующим образом:
type &ID = инициализатор;
Инициализатор - это идентификатор объекта, на который в
дальнейшем будет указывать ссылка. Пример:
int a = 8;
int &r = a;
Ссылка стала "псевдонимом" объекта, указанного в качестве
инициализатора. В данном примере, одинаковыми будут
следующие действия:
a++;
r++;
Наиболее полезны ссылки оказываются в качестве параметров
функций, т.к. значение (конкретный адрес) им тогда присваивается
при вызове функции. Например, вышеприведенный пример с
функцией zam тогда можно переписать так:
void zam(int &x, int &y)
{
int t = x;
x = y;
y = t;
}
void main(){
... // тело функции main
FunOut(f1);
... // тело функции main
}
m зна чения
. . .