Кажется, я добавляю 4 к значению из массива, но почему?
Нет, каждый элемент массива является int *
, потому что вы объявили массив таким образом:
int *array1[] = {1,4,3,4};
То есть array1
- это массив, значения которого имеют указатель типа на int
. Удалите *
, если вам нужен массив int
, например:
int array1[] = {1,4,3,4};
Когда вы добавляете или вычитаете из типов указателей, значение изменяется в несколько раз больше размера типа, указанного указателем. относится к. Значение int
в вашей системе, вероятно, составляет 4 байта, поэтому выражение типа array1[0]+1
получает int *
, сохраненное в array[0]
, и увеличивает его, так что оно увеличивается на sizeof(int)
.
(каждый элемент в массиве состоит из байта).
Даже если вы объявили свой массив как массив int
, а не как массив int *
, размер из int
, вероятно, не 1 байт. int
обычно имеет длину 4 байта, но размер зависит от компилятора и целевой системы.