Я должен отметить, что *(variable + 6)
не точно как variable[6]
, это работает только потому, что компилятор знает размер объектов, указанных в переменной (int
4 байта), так что на самом деле происходит, добавляющие указатели : variable + 6*sizeof(int)
. Это просто абстрагируется компилятором.
Я не совсем уверен (более того, она может зависеть от компилятора), но с массивом структур это не может работать, потому что это struct
в два раза превышает размер int
:
struct a {
int a;
int b;
};
struct a arr[5];
int nmb;
struct a *res = nmb[arr]
Это было много времени с тех пор, как я использовал чистый C, но это '&' похоже, что он принимает адрес чего-то; как это может быть присвоено 'int' без литья? –
@ Компиляция комминера дает предупреждение об этом! Однако этот пример не предназначен для правильного кода, чтобы просто понять что-то об арифметике указателя. – Kerby82