2013-11-20 5 views
2

рассмотреть следующий код Cдругого представления массива элемента

int a[]={1,2,3,4}; 
printf("%d",2[a]); 

Печатает «3» .Как это возможно? Я знаю, что в [2] a - базовый адрес массива. Но в 2 [a] что такое 2? и как он обращается к массиву? Я полностью смущен этим представлением массива.

+0

'2 [a] == a [2] == 3'. – devnull

+0

Хороший улов на дубликат, @devnull! Должен признаться, я не знал ответа. – Floris

+0

@Floris Глядя на [это] (http://stackoverflow.com/a/14547307/2235132), я должен сказать, что я тебе не верю. – devnull

ответ

0
*(expr1+expr2) is equivalent to expr1[expr2] or expr2[expr1]. 

*(expr2+expr1) is equivalent to expr2[expr1] or expr1[expr2]. 
2

Есть две вещи, чтобы помнить здесь:

  • Первое, что доступ к массиву в основном только причудливый способ использования арифметики указателей. Например, если у вас есть массив

    int a[10]; 
    

    затем

    a[3] = 5; 
    

    равно

    *(a + 3) = 5; 
    
  • Вторая вещь, чтобы помнить о том, что дополнение (как в a + 3 выше) является commutative , поэтому a + 3 - это то же самое, что и 3 + a. Это приводит к, например,

    *(3 + a) = 5; 
    

    , которые могут быть интерпретированы как

    3[a] = 5; 
    
0

Это просто еще один способ, чтобы написать элемент массива.

В int a[]={1,2,3,4};, элемент с индексом 3 можно ссылаться многими способами:

  1. как массив элементов: a[3]
  2. Используя указатель: *(a + 3) или *(3 + a) [Добавление коммутативен в арифметике и в С]
  3. Теперь вы можете написать второй способ представления с помощью указателя как 3[a], т.е. a[3] равен *(a + 3) равен *(3 + a) равен 3[a].
1

int a[]={1,2,3,4}; представляет собой целое число массив, содержащий 4 элемента и a это базовый адрес, пусть базовый адрес обозначим через X. Теперь a[1] означает элемент по адресу X + sizeOf(int) * 2 = Y (предположим), то есть элемент по адресу Y, аналогично 2[a] означает элемент на adsress sizeOf(int) * 2 * X = Y.

Таким образом, даже если вы пишете a[2] или 2[a] в конечном итоге компилятор распознает его как Y и refres к элементу по адресу Y, который в нашем случае 3.

Надеюсь, что проблема решена правильно.

Смежные вопросы