Основной операцией над указателем является разыменование, т. е. ссылка на объект, на который указывает указатель. Эту операцию также именуют косвенным обращением. Например:
char c1 = ‘a’;
char* p = &c1 -- в p хранится адрес c1
char c2 = *p; -- c2 = ‘a’
Над указателями можно осуществлять определенные арифметические действия. К примеру, функция,
подсчитывающая число символов в строке (не считая
завершающего 0):
int strlen(char* p)
{
int i = 0;
while (*p++) i++;
return i;
}
Два структурных типа различны, даже когда они
имеют одинаковые члены. К примеру:
struct s1 {int a;};
struct s2 {int a;};
являются двумя разными типами, поэтому
s1 x;
s2 y = x; -- ошибка: несоответствие типов.
Структурные типы отличаются и от основных
типов, поэтому
s1 x;
int i = x; -- ошибка: несоответствие типов
Но существует механизм описания нового имени
для типа, который не требует введения нового типа.
Описание с префиксом typedef вводит не новую переменную данного типа, а новое имя этого типа. К примеру:
typedef char* Pchar;
Pchar p1, p2;
char* p3 = p1;