2013-04-25 3 views
0

Учитывая код:C++ указатель арифметика

int arr[] = {11,22,33,44,55} 
for(int i = 0; i <5 ; i++) 
    cout << *(arr+i) << " "; 

ли иметь тот же эффект, как arr[i]*(arr+i)?

+1

Да, это так, это точно так же. – piokuc

+0

Легко проверить, что происходит, когда вы его заменяете 'arr [i]' –

+0

Это то же самое, что и 'i [arr]'. –

ответ

11

Да. В самом деле, оператор нижнего индекса E1[E2] определяются как эквивалент *((E1)+(E2)):

Выражение постфикса следует выражение в квадратных скобках является выражением постфикса. Одно из выражений должно иметь тип «указатель на T», а другой должен иметь неперечисленное перечисление или интегральный тип. Результатом является lvalue типа «T». Тип «T» должен быть полностью определенным типом объекта. Выражение E1[E2] идентично (по определению) до *((E1)+(E2)).

+1

Что приводит к чему-то странному, например: 'i [arr]'. – m0nhawk

1

Да. массив распадается на pointers. Имя массива указывает на первый элемент массива. Так

*(arr +i) 

эквивалентно:

arr[i] 
Смежные вопросы