индексы? Например int **а;
a[0] = (int*)malloc(sizeof (int*)); и т.д.
ptr[i] = *(ptr + i)
мне не понятно как это работает, указатель на указатель ведь не массив, а можно как массив указателей юзать
это со смещением как-то связано ?
Так и обычный указатель - совсем не обязательно, что массив, но если он указывает на начало массива (будем говорить, что является массивом), то ничего же не мешает использовать индексацию int** p - указатель на указатель на инт. В твоем случае - массив указателей на инты. Вот ты и индексируешь этот массив. А элементы сами могут быть массивами интов. А могут быть и простыми указателями на одинокие инты. Двумя словами: фактически указатель может трактоваться как массив, поэтому его можно индексировать. Что в этом массиве лежит - неважно.
Да, я понял. По факту индекс просто задаёт на сколько ячеек памяти нужно шагнуть от нулевого элемента (для int в х64 винде шаг равен 8байт). Можно даже указать индекс где уже нет твоих данных и он все равно отступит сколько указано от начала.
не на 8 байт только. А на размер элемента
С последним утверждением осторожнее: формально, указано можно, а вот каких-либо гарантий при разыменовании не будет
дак я и написал для примера что инт в винде 8 байт, для чара будет 1 и т.п.
да, это понятно, там мусор будет, если выйти за границы.
это в лучшем случае, а в большинстве случаев ОС даст пинка проге и выгонит из исполнения за нарушение границ
Да, перепутал с размером ячейки под int*
Обсуждают сегодня