Я видел, что значения массива будут меняться, если параметр функции «int arr []» или «int * arr». Где разница?Разница между int * array и int array [] в параметре функции
целочисленный массив []:
void myFunction(int arr[], int size) {
for (int i = 0; i < size; ++i)
arr[i] = 1;
}
INT * массив:
void myFunction(int * arr, int size) {
for (int i = 0; i < size; ++i)
arr[i] = 1;
}
Обе функции изменяют значения массива.
int main(){
int array[3];
array[0] = 0;
array[1] = 0;
array[2] = 0;
myFunction(array, 3);
return 0;
}
посмотрите на это http://stackoverflow.com/questions/5491789/any-difference-between-fooint-arr-and-fooint-arr – Rohan
Нет разницы. Вообще. _ В списке параметров function_, 'int arr []' - не что иное, как «альтернативная» запись для 'int * arr'. (И поэтому вы можете увидеть 'int main (int argc, char * argv [])' или 'int main (int argc, char ** argv)'.) Даже если вы должны были положить число внутри скобок !: в 'void f (int a [10])' '' 10' полностью ** игнорируется **, что означает 'void f (int a [])', то есть 'void f (int * a)'. –
И как сказано в ответах, для вызова 'myFunction (array, 3);' ваш массив неявно преобразован в _pointer_ в свой первый элемент и этот указатель передается функции (с записью параметра), так как если вы вызвали 'myFunction (& (array [0]), 3);'. Один способ действительно передать массив (на самом деле, _reference_ к нему) - написать такую функцию, как 'template void g (int (& arr) [size])', что позволяет называть его следующим образом: 'g (array) ; '. –