Допустим, мы создаем массив, как:передачи указателей (название массива) в функции в C/C++
int a[4]={1,2,3,4};
Теперь a
это имя этого массива, а также указатель указывает на первый элемент a[0]
, Поэтому, когда я хочу вызвать элементы в массиве, я могу использовать a[ i ]
или *(a+i)
.
Теперь у меня есть функция:
void print_array(int* array, int arraySize){
for(int i=0; i<arraySize; i++){
cout<<*(array+i)<<endl;
cout<<array[i]<<endl;
}
}
Когда я прохожу a[4]={1,2,3,4}
в эту функцию с помощью print_array(a,4)
, для первой линии cout
, я полностью понимаю, потому что я использую *(a+i)
метод доступа к данным и a
является указателем Я прошел.
То, что я не могу понять: так как я передать указатель a
в функцию, поэтому я могу использовать a
в формате a[i]
как вторая линия cout
? Разве не a
указатель? Если a
является указателем, почему работает a[i]
?
Это смутило меня целый день. Любая помощь будет высоко ценится!
a [b] всегда точно совпадает с символом '* (a + b)' независимо от того, что такое a и b. – fuz
@fuz подробно объяснил здесь http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1 –
Я думаю, что [i ], по существу, перевести значение в плюс один размер того, что указывает. –