Этот код эквивалентен:
#include <stdio.h>
int main(void) {
char direction_name = 1["nsew"];
printf("[%c]\n",direction_name);
return 0;
}
, который will print [с], потому что
char direction_name = 1["nsew"]; // "nsew" is string literal, i.e. an array
// of 5 chars 'n' 's' 'e' 'w' '\0'
равна
char direction_name = "nsew"[1];
, а также
char direction_name = *("nsew" +1);
Поэтому []
симметрична в том смысле, что
x[y] == y[x] // if conditions given in C standard 6.5.2.1/2 are met
Вы можете думать о [] в качестве симметричного соотношения в алгебре (при предположениях от 6.5.2.1 § 2):
Или вы можете думать о [] как линейное отображение (преобразование, функционал) между reflexive (Banach) линейными пространствами V и V **, если хотите:
x[f] = [f,x] = f[x]
стандарта С n1124 6.5.2.1 § индексацией массивами (акцент основного)
постфиксного выражением, за которым следует выражение в квадратных скобках []
является подстрочным обозначением элемента объекта массива. Определение индексного оператора []
состоит в том, что E1[E2]
идентичен (*((E1)+(E2)))
.Из-за правило преобразования, которые применяются к бинарному оператору +, если E1
является объектом массива (что эквивалентно, указатель на начальный элемент массива объекта) и E2
является целым числом , E1[E2]
обозначает E2
-го элемент от E1
(с нуля).
для любого массива или указателя 'p',' i [p] 'и' p [i] 'приходят к тому же значению, то есть' * (p + i) '. первая форма совершенно верна, и вы можете найти ее в стандарте. но на самом деле это слишком базар, поэтому вы можете видеть его редко. – HuStmpHrrr