вторник, 5 марта 2013 г.

C/C++ чем * отличается от &

Статья
В С/С++ существует понятие указателя. Указатель – это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера.

int *a; //создается указатель  с типом данных int

Тип данных определяет возможные действия над указателем. Так же не стоит забывать про void.

int b=2;//создаем переменную со значением 2

a=&b;//записываем в указатель а АДРЕС значения переменной b

То есть оператор & возвращает адрес переменной.

Теперь небольшой фокус:
int *a;
int b=2;
a=&b;
 
int v;
v=*a;//в значение переменной v будет находиться 2

//, здесь*a -называется разыменованием

//тоесть по сути это равнозначно v=b; 


Теперь самое интересное! Операции над указателями.

Над указателями определено 5 основных операций.
1)    Определение адреса указателя: &p, где p – указатель (&p – адрес ячейки, в которой находится указатель).

2)     Присваивание. Указателю можно присвоить адрес переменной p=&q, где p – указатель, q – идентификатор переменной.

3) Определение значения, на которое ссылается указатель: *p (операция косвенной адресации).

4) Увеличение (уменьшение) указателя. Увеличение выполняется как с помощью операции сложения (+), так и с помощью операции инкремента (++). Уменьшение – с помощью операции вычитания (–) либо декремента (––).

Например, пусть p1 – указатель, тогда р1++ перемещает указатель на:
     -1 байт, если *p1 имеет тип char; 
  -4 байта, если *p1 имеет тип int (в 32 разрядной операционной системе) или 2 байта (в 16 разрядной операционной системе);
  -4 байта, если *p1 имеет тип float.

5)    Разность двух указателей. Пусть р1 и р2 – указатели одного и того же типа. Можно определить разность р1 и р2, чтобы найти, на каком расстоянии друг от друга находятся элементы массива.

Комментариев нет:

Отправить комментарий