Тип данных указателя необходим в двух ситуациях:
- Защита указателя
- Арифметика указателя
Как это используетсяв разыменование указателя ?
Рассмотрим следующий пример:
{
char *k; //poniter of type char
short j=256;
k=&j; // Obviously You have to ignore the warnings
printf("%d",*k)
}
Теперь, поскольку k имеет тип char
, поэтому он будет читать только один байт.Теперь двоичное значение 256
равно 0000000100000000
, но поскольку k относится к типу char
, поэтому он будет читать только первый байт, поэтому на выходе будет 0.
Примечание : если мы назначим j =127, то на выходе будет 127, потому что 127 будет удерживаться первым байтом.
Теперь перейдем к арифметике указателей :
Рассмотрим следующий пример:
{
short *ptr;
short k=0;
ptr=&k;
k++;
ptr++;// pointer arithmetic
}
Являются ли операторы k++
и ptr++
одинаковыми?Нет, k++
означает k=k+1
, а ptr++
означает ptr=ptr+2
.Поскольку компилятор «знает», что это указатель и что он указывает на короткое замыкание, он добавляет 2 к ptr вместо 1, поэтому указатель «указывает» на следующее целое число.
Для получения дополнительной информации см. Вторую главу этого учебника.