169 похожих чатов

Добрый день! хотел узнать, насколько это плохо, писать так: *(*(token +

i) +j)

вместо:
token[i][j]

?

21 ответов

20 просмотров

Ни сколько не плохо, но эти записи не всегда эквивалентны

Edem-Khadiev Автор вопроса

char token = calloc(256, sizeof token); for (size_t i = 0; i < 256; i++) { *(token + i) = calloc(256, sizeof *token); }

Edem Khadiev
char token = calloc(256, sizeof token); for (size_...

Ну да, это - массив указателей на массивы.

Edem-Khadiev Автор вопроса
Ilya Zviagin
Ну да, это - массив указателей на массивы.

Так, а значит если это массив char token[256][256], то обращение через *(*(token + i) +j) будет некорректно?

Ilya Zviagin
Ну да.

token[1][2]=4; int test = token[1][2]; printf("%i\n",test); int test2 = *(*(token+1)+2);

Советую не пользоваться calloc для выделения памяти под структуры.

Второе всегда читается лучше, чем первое

Edem-Khadiev Автор вопроса
Artöm Bakri Al-Sarmini
Всегда

теперь я в замешательстве.

а если в памяти токены распределены не подряд?

Artöm Bakri Al-Sarmini
По определению a[n] это *(a + n)

но не наоборот, если a не определена как массив

пошукач 🥝
но не наоборот, если a не определена как массив

Если a не определен как массив, то результат арифметики указателей для него тоже не определён.

Разве указатель на объект не трактуется как указатель на массив из одного элемента? Вроде как должны быть валидными, если я в стандарте не напутал, такие вещи: int a = 0; int *pa = &a + 0; int *pb = &a + 1; // but dont deref

pb разыменовывать нельзя, а pa вполне можно. Но при этом &a + 2 нельзя даже вычислять

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта