Учитывая код:C++ указатель арифметика
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
ли иметь тот же эффект, как arr[i]
*(arr+i)
?
Учитывая код:C++ указатель арифметика
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
ли иметь тот же эффект, как arr[i]
*(arr+i)
?
Да. В самом деле, оператор нижнего индекса E1[E2]
определяются как эквивалент *((E1)+(E2))
:
Выражение постфикса следует выражение в квадратных скобках является выражением постфикса. Одно из выражений должно иметь тип «указатель на
T
», а другой должен иметь неперечисленное перечисление или интегральный тип. Результатом является lvalue типа «T
». Тип «T
» должен быть полностью определенным типом объекта. ВыражениеE1[E2]
идентично (по определению) до*((E1)+(E2))
.
Что приводит к чему-то странному, например: 'i [arr]'. – m0nhawk
Да. массив распадается на pointers
. Имя массива указывает на первый элемент массива. Так
*(arr +i)
эквивалентно:
arr[i]
Да, это так, это точно так же. – piokuc
Легко проверить, что происходит, когда вы его заменяете 'arr [i]' –
Это то же самое, что и 'i [arr]'. –