С одномерным массивом все просто. Рассмотрим случай передачи локального одномерного массива mass, который мы инициализируем в функции main() и передаем функции print(), которая нам выведет содержимое массива:
int print(int massive[]) {обратите внимание, что в функции print мы задаем имя формального параметра как massive, хотя никто не запрещает нам использовать и mass. Я обращаю внимание, что хоть и называем параметр по другому, но если бы наша функция и меняла что-то в массиве, то эти изменения совершались не над копией массива, а над ним самим.
for (int i=0; i<5; i++) printf(" %d", massive[i]);
return 0;
}
int main(){
int mass[5]={0, 5, 9, 12, 8};
print(mass);
return 0;
}
Бывают случаи, когда приходится работать с двумерными массивами. Допустим, вам необходимо передать двумерный массив какой-то хитрой функции. При этом учтем, что наш массив не глобальный, иначе его можно и не указывать в формальных параметрах.
Пусть у нас в функции определяется какой-то локальный массив m2d[3][5]. В таком представлении, грубо говоря, мы можем видеть этот массив в нашем богатом воображении как таблицу, у которой 3 строки и 5 столбцов. Итак вот каким образом мы передаем этот массив функции:
int foo( int (*mass)[5]) {вот собственно и все. однако не злоупотребляйте многомерными массивами - это может привести к сжиранию памяти, т.к. в таких случаях ее очень сложно отслеживать.
//some code
....
}
int main(){
//определяем и сразу инициализируем массив
int m2d[3][5] = {
(0, 1, 5, 7, 4),
(5, 12, 8, 0, 7),
(1, 1, 1, 59, 7)
};
foo(m2d);
return 0;
}
Спасибо ONIKSfly!
ОтветитьУдалитьВсе доступно объяснил...
Код сначала неплохо было бы проверить на машине. Работает ли ;)
ОтветитьУдалитьМогу заверить, что не работает!
зачем писать не проверив. чушь полная. не будет работать
ОтветитьУдалитьУ меня все работает. Большое спасибо!
ОтветитьУдалитьЯ бы не стал представлять код, который не работает.
ОтветитьУдалитьБолее того, не являясь фанатом языка C++, описал лишь задачу, при решении которой у меня возникли трудности.
Просто хотел поделиться (:
Все отлично работает
ОтветитьУдалитьcannot convert parameter 1 from 'int' to 'int []'
ОтветитьУдалитьсделал все как в примере
присто return 0 убери и заработает
ОтветитьУдалитьdouble (*parr)[7];
ОтветитьУдалитьexp int __stdcall GetRates(double (*arr)[7])
{
parr=arr;
}
После такой записи можно во всех функциях использовать массив без передачи.
void func()
{
parr[i][j]=123;
}
Спасибо, все прекрасно работает! (VS2010)
ОтветитьУдалить