Можно сравнивать два указателя, если они указывают на один и тот же объект. Если же они указывают на разные объекты, то их можно проверить только на несовпадение.
Пример сравнения на неравенство указателей.
#include <stdio.h>
int main()
{
int a,b;
int *p1, *p2;
p1=&a;
p2=&b; // Указатели p1 и p2 не равны, так как они указывают на
// разные объекты
if (p1!= p2) printf (“Указатели p1 и p2 не равны \n”);
else printf(“Эта строка не напечатается \n”);
return 0;
}
Операция new
Условно можно разделить всю память на 2 вида: автоматически распределяемую при работе программы (например, при объявлении переменной int a[10]; автоматически выделяется 10 ячеек памяти, каждая из которых предназначена для хранения целого значения) и свободную или динамически распределяемую. Доступ к ячейкам свободной памяти осуществляется посредством указателя, хранящего адрес нужной ячейки. Для выделения памяти в области динамического распределения используется ключевое слово new. Формат для выделения переменной
new имя_ типа;
Например, new int; выделит два байта памяти, а new long; четыре байта. В качестве результата оператор new возвращает адрес выделенного фрагмента памяти. Этот адрес должен присваиваться указателю.
Примеры.
unsigned short int *ps;
ps = new unsigned short int;
Теперь ps указывает на ячейку памяти, достаточную для хранения значения типа unsigned short int, и туда можно занести какое-нибудь значение: *ps = 72;
float *pa;