steinkrauz - Запретите уже Си

> Recent Entries
> Archive
> Friends
> User Info

February 4th, 2022


Previous Entry Add to Memories Tell A Friend Next Entry
08:59 pm - Запретите уже Си

(15 comments | Leave a comment)

Comments:


[User Picture]
From:[info]steinkrauz
Date:February 4th, 2022 - 06:17 pm
(Link)
Ну смотри, docs у нас имеет тип (void **), то есть указатель на массив.
Оператор [], обращение к элементу массива, имеет больший приоритет, чем оператор *, разыменование указателя.
Таким образом, в первой строчке мы берём указатель на массив, увеличиваем его на размер индекса, и разыменовываем то, что получилось по этому новому указателю.
Поэтому, для случая, когда i===0, всё работало. Прибавление нуля ничего не меняло, мы получали указатель на начало массива, и прекрасно его заполняли. А вот когда i становилось равно 1 и больше, сдвинутый указатель начинал смотреть хер знает куда, и при попытке туда писнуть всё падало.

Со скобками же ситуация меняется. Мы сначала разыменовываем указатель на массив, и дальше спокойно обращаемся по индексу к его элементам. Всё работает, ничего не падает, пользователи кидают чепчики в воздух.
From:(Anonymous)
Date:February 4th, 2022 - 06:30 pm
(Link)
очень извиняюсь опять же, а почему в данном (или в любом другом) случае следует обращаться к элементам массива таким образом? например, в правой стороне присваивания обращение к элементу массива sp_tags[j] происходит без этих технических сложностей.
[User Picture]
From:[info]steinkrauz
Date:February 4th, 2022 - 06:48 pm
(Link)
Потому что я пишу не для собственного удовольствия, а в рамках некоего API.
Со стороны этого API мне выдаётся указатель на целое, куда я должен положить размер массива, и указатель на массив, куда я должен положить собственно массив. Вот из-за этого и происходит цирк.

Это ещё ничего, иногда там приходится и с тройными указателями работать, но я это пока что успешно избегаю.
From:(Anonymous)
Date:February 4th, 2022 - 07:43 pm
(Link)
кажется, понял. вместо целого пустого массива апи отдает указатель на массив и на целое для размера. спасибо за объяснения.

> Go to Top
LJ.Rossia.org