Инициализация указателей. Инициализация указателей имеет две формы:
Инициализация указателей имеет две формы:
type * имя указателя = инициирующее выражение; type * имя указателя (инициирующее выражение); В качестве инициирующего выражения может быть: 1) явно заданный адрес участка памяти: type * имя = (type *) 0x158e0ffc; 2) выражение, возвращающее адрес объекта с помощью операции '&': type count=; type_1* iptr = (type_1*) & count; 3) указатель, имеющий значение: char ch = '+', *R = & ch; char *ptr = R; 4) инициирующее выражениеравно пустому указателю: NULL – специальное обозначение указателя ни на что не указывающего. char * ch (0) эквивалентно char * ch (NULL). Доступ к значению объекта, адресуемому указателем, обеспечивает операция разыменования, выражение: *имя указателя; позволяет получить значение самого объекта:
char cc = 'a', *pc = &cc; cout << *pc; и изменить это значение: *pc = '+'; cin >> *pc; Можно сказать, что * указатель – обладает правами переменной. Если определен указатель без инициализации: сhar *p, использовать выражение *p в операциях присваивания или в операторе ввода не правомерно. Указатель p не обладает значением - адресом участка памяти, куда можно было занести значение. Указателю можно присвоить адрес участка памяти объекта типа char: 1) p = new char; // динамическое выделение, delete (p) - освобождение памяти 2) p = (char *) 0x157e0ffc;//значение адреса преобразуется к указателю char* 3) p =(char*) malloc (sizeof (char)); // динамическое выделение памяти free (p) – освобождение памяти 4) p присвоить адрес переменной типа char: char c; p = &c; 5) p присвоить значение другого указателя на данные типа char*: char s, *ptr=&s; p=ptr; Теперь допустимы операции *p ='+'; cin >> *p;
|