Вы можете использовать указатель как массив, индексированный доступ - это просто синтаксический сахар для отмены ссылки на адрес со смещением. k[n]
совпадает с *(k + n)
.
Чтобы проверить первый байт памяти, на которую указывает k
для 0xFF
, напишите:
if (*((char *)k + 0) == 0xFF) {
/* ... */
}
Или напишите это:
if (((char *)k)[0] == 0xFF) {
/* ... */
}
Или напишите это:
char* p = (char*)k;
if (p[0] == 0xFF) {
/* ... */
}
Помните, что важен тип элементов, на которые указывает указатель. Попробуйте этот пример и извлеките уроки из его вывода:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int* pi = malloc(100 * sizeof *pi);
if (!pi) {
puts("Memory allocation error!");
return 1;
}
pi[3] = 23;
char* pc = (char*)pi;
printf("%d\n", pc[3 * sizeof (int)]);
printf("pi: %p %p\n", pi, pi + 3);
printf("pc: %p %p\n", pi, pc + 3);
return 0;
}