i) +j)
вместо:
token[i][j]
?
Ни сколько не плохо, но эти записи не всегда эквивалентны
char token = calloc(256, sizeof token); for (size_t i = 0; i < 256; i++) { *(token + i) = calloc(256, sizeof *token); }
Ну да, это - массив указателей на массивы.
Так, а значит если это массив char token[256][256], то обращение через *(*(token + i) +j) будет некорректно?
token[1][2]=4; int test = token[1][2]; printf("%i\n",test); int test2 = *(*(token+1)+2);
Советую не пользоваться calloc для выделения памяти под структуры.
А как по-другому?
Второе всегда читается лучше, чем первое
теперь я в замешательстве.
а если в памяти токены распределены не подряд?
А как ты их тогда индексируешь?
По определению a[n] это *(a + n)
но не наоборот, если a не определена как массив
Что не наоборот? Это равнощначные записи
Если a не определен как массив, то результат арифметики указателей для него тоже не определён.
Разве указатель на объект не трактуется как указатель на массив из одного элемента? Вроде как должны быть валидными, если я в стандарте не напутал, такие вещи: int a = 0; int *pa = &a + 0; int *pb = &a + 1; // but dont deref
Тут разыменования нет
pb разыменовывать нельзя, а pa вполне можно. Но при этом &a + 2 нельзя даже вычислять
Мы немного о другом говорили
Обсуждают сегодня