Я снова погружаюсь в C через несколько лет. Я думал, что следующие два оператора печати будут иметь одинаковый результат на основе другие ответы я нашел; однако, похоже, это не так.
int main()
{
int** arr = malloc(
3 * sizeof(int*)
);
for(int y = 0; y < 3; y++) {
int* subarr = malloc(
3 * sizeof(int)
);
for(int x = 0; x < 3; x++) {
subarr[x] = y * 3 + x + 1;
}
arr[y] = subarr;
}
printf("%d\n", *(&arr[0][0]) + 3);
printf("%d\n", (&arr[0][0])[3]);
}
Может ли кто-нибудь объяснить, что здесь происходит / что мне не хватает?
x[3]
и*(x+3)
одинаковы, но ваш первый отпечаток(*x) + 3
, который отличается - person M.M   schedule 27.04.2020(&arr[0][0])[3]
доступ за пределы (вызывая неопределенное поведение) - person M.M   schedule 27.04.2020