Я недавно заметил, что в C есть важное различие между array
и &array
для следующего объявления:
char array[] = {4, 8, 15, 16, 23, 42};
Первым является указатель на символ , а последний - указатель на массив из 6 символов . Также следует отметить, что надпись a[b]
является синтаксисом c сахара для *(a + b)
. В самом деле, вы могли бы написать 2[array]
, и он отлично работает в соответствии со стандартом.
Таким образом, мы могли бы воспользоваться этой информацией, чтобы написать это:
char last_element = (&array)[1][-1];
&array
имеет размер из 6 символов, поэтому (&array)[1])
- указатель на символы, расположенные сразу после массива. Глядя на [-1]
, я получаю доступ к последнему элементу.
С этим я мог бы, например, поменять весь массив:
void swap(char *a, char *b) { *a ^= *b; *b ^= *a; *a ^= *b; }
int main() {
char u[] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < sizeof(u) / 2; i++)
swap(&u[i], &(&u)[1][-i - 1]);
}
Имеет ли этот метод для доступа к массиву к концу fl aws?