Давайте разберемся с каждым из выражений и выясним, какое из них не эквивалентно выражению a[i] + j.
- a[i] + j - это выражение, которое означает, что мы берем элемент массива a в строке i и прибавляем к нему значение j.
- *(a + i) + j - это выражение, которое также эквивалентно a[i] + j. Здесь происходит следующее:
- a + i - это указатель на i-ую строку массива a.
- *(a + i) - это разыменование указателя, то есть получение i-ой строки массива.
- + j - прибавление j к значению, полученному на предыдущем шаге.
- &a[i][j] - это выражение, которое не эквивалентно a[i] + j. Здесь происходит следующее:
- &a[i][j] - это адрес элемента массива a в строке i и столбце j.
- Это не арифметическая операция, а операция получения адреса, поэтому оно не эквивалентно прибавлению j к элементу a[i].
- *a[i] + j - это выражение, которое также эквивалентно a[i] + j, если рассматривать a[i] как указатель на начало строки. Однако здесь может быть путаница, так как *a[i] часто интерпретируется как разыменование первого элемента, но в контексте прибавления j это будет эквивалентно a[i] + j.
Таким образом, выражение, которое не эквивалентно a[i] + j, это &a[i][j], так как оно возвращает адрес элемента, а не вычисляет сумму.