Основной операцией над указателем является разыменование, т. е. ссылка на объект, на который указывает указатель. Эту операцию также именуют косвенным обращением. Например:
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;