Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: передача массива из функции
 
 автор: tricket   (23.11.2007 в 11:21)   письмо автору
 
 

Как передать массив с функциии которую вызываем в main не использую глобальные переменные?!
Пожалуйста дайте лёгкий пример!

  Ответить  
 
 автор: alex19921992   (24.11.2007 в 01:13)   письмо автору
 
   для: tricket   (23.11.2007 в 11:21)
 



void fuck(char *a,int n)
{
for(int i=0;i<n;i++)a[i]=0;

}

void main(void)
{
int a[45];
fuck(a,45);
}

  Ответить  
 
 автор: tricket   (24.11.2007 в 07:04)   письмо автору
 
   для: alex19921992   (24.11.2007 в 01:13)
 

cпасибо так работает! но нужен 2 мерный массив, ну и вообще много мерный

#include <stdio.h>
void fuck(int *a,int n,int m)
{
  for(int i=0;i<n;i++){
    for(int g=0; g<m; g++){
        a[i][g]=22;
    }
  }

}

void main(void)
{
int a[45][45];
fuck(a,45,45);
printf("%d",a[3][1]);
}

Выдал кучу ошибок...
Компилирую в borland C++ for DOS 3.1

  Ответить  
 
 автор: Фитч   (24.11.2007 в 13:10)   письмо автору
 
   для: tricket   (24.11.2007 в 07:04)
 

Вот пример работы с матрицей. Компилится в Dev-C++, по идее, это ANSI C++, а, значит, должно работать и в Borland C++ 3.1

#include <stdio.h>

void initArray(int* matrix, int n, int m)
{
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {
      *(matrix+i*m+j) = 0;
    }
  }
}

int main(int argc, char* argv[])
{
      int mat[3][4];

      initArray(&mat[0][0],3,4);

      for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 4; j++) {
          printf("%d ",mat[i][j]);
        }
        printf("\n");
      }
      return 0;
}

  Ответить  
 
 автор: alex19921992   (25.11.2007 в 02:43)   письмо автору
 
   для: Фитч   (24.11.2007 в 13:10)
 

хм... по идее, надо initArray(int** matrix, int n, int m) (то есть две звездочки так как массив 2мерный), хотя не знаю... точно работает?????

  Ответить  
 
 автор: tricket   (25.11.2007 в 07:59)   письмо автору
 
   для: Фитч   (24.11.2007 в 13:10)
 

спасибо! РАБОТАЕТ! один вопрос, нужен для защиты программы преподавателю, *(matrix+i*m+j) = 0; что означает?
и почему в C++ не могут как в PHP сделать передачу с функции массива(return $array) просто?

  Ответить  
 
 автор: cheops   (25.11.2007 в 08:37)   письмо автору
 
   для: tricket   (25.11.2007 в 07:59)
 

Вы можете вернуть при помощи return указатель - его не обязательно через параметры возвращать.

>и почему в C++ не могут как в PHP сделать передачу с функции массива(return $array) просто?
Потому что массивов в C++ как таковых нет - имеются лишь указатели на область памяти, вы можете обращаться к ячейкам этой памяти при помощи квадратных скобок [], это будет выглядеть так, как если бы вы обращались к массиву - однако вы вполне можете перепахать всю память программы, если выйдите за пределы массива - C++ это не отслеживает (поэтому программы такие быстрые - не выполняются многие операции, которые выполняютс в других языках).

  Ответить  
 
 автор: alex19921992   (26.11.2007 в 03:15)   письмо автору
 
   для: tricket   (25.11.2007 в 07:59)
 

*(matrix+i*m+j) = 0
matrix - указатель на ячейку памяти. предположем это ячейка имеет номер 100 (в десятичной системе счисления). тогда (matrix+i*m+j) = это ячейка с номером 100+i*m+j. а звездочка перед скобками - это значит "взять переменную по адресу matrix+i*m+j". то есть вычисляется адрес переменной, а потом берется сама переменная. таким образом здесь имитируется 2мерный массив. можно было просто написать matrix[i][j]=0

  Ответить  
 
 автор: tricket   (26.11.2007 в 10:40)   письмо автору
 
   для: alex19921992   (26.11.2007 в 03:15)
 

хм ячейка же может байт содержать, а если число будет иметь 20-30 знаков?!

  Ответить  
 
 автор: alex19921992   (26.11.2007 в 20:48)   письмо автору
 
   для: tricket   (26.11.2007 в 10:40)
 

размер ячейки это sizeof(тип эл-та массива)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования