Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 14:34   #1
bajaka
 
Регистрация: 22.06.2011
Сообщений: 7
Печаль Передача двумерного массива в функцию

Здравствуйте,подскажите пожалуйста как передать двумерный массив в функцию?
Например,мне нужно передать два массива - mas1(массив - черновик),mas(массив - образец),функция приравнивает mas1 к mas,но я не знаю как передать их в функцию((
Пробовал вот так: void rewrite(int (&m)[N][M],int (&m1)[Z][X]) , но при выводе оказывается,что передаётся только часть массива...
bajaka вне форума Ответить с цитированием
Старый 25.10.2011, 15:34   #2
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

И что вы хотите сделать, копировать элементы одного массива в другой ?
An1ka вне форума Ответить с цитированием
Старый 25.10.2011, 19:30   #3
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от bajaka Посмотреть сообщение
Здравствуйте,подскажите пожалуйста как передать двумерный массив в функцию?
Например,мне нужно передать два массива - mas1(массив - черновик),mas(массив - образец),функция приравнивает mas1 к mas,но я не знаю как передать их в функцию((
Пробовал вот так: void rewrite(int (&m)[N][M],int (&m1)[Z][X]) , но при выводе оказывается,что передаётся только часть массива...
В том объявлении, которое вы используете, значения размерности массивов должны быть константными выражениями. То есть нельзя писать так

Код:
int ( &m )[N][M]
если N и M - это некоторые переменные, а не числовые константы.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 26.10.2011, 07:23   #4
Бинари
Пользователь
 
Регистрация: 23.09.2011
Сообщений: 17
По умолчанию

Вот правильное объявление:

Код:
void rewrite(int **m, int **m1б, int N, int M, int Z, int X)
Двумерный массив есть одномерный массив одномерных массивов, имя массива есть указатель, поэтому имя двумерного массива есть указатель на указатель. Если последние 4 параметра должны изменяться, то перед ними либо * либо & как удобнее.

Последний раз редактировалось Бинари; 26.10.2011 в 07:25.
Бинари вне форума Ответить с цитированием
Старый 26.10.2011, 11:59   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Бинари

имя двумерного массива есть указатель на указатель

это полный бред.

попробуй, например вызвать эту функция для такого массива:

int m[10][20];
zero(m, 10, 20);

где прототип у zero = void zero(int** m, int N, int M);

и внутри zero обнулить все ячейки массива. потом сообщи о результатах :D
Rififi вне форума Ответить с цитированием
Старый 26.10.2011, 19:04   #6
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Бинари Посмотреть сообщение
Вот правильное объявление:

Код:
void rewrite(int **m, int **m1б, int N, int M, int Z, int X)
Двумерный массив есть одномерный массив одномерных массивов, имя массива есть указатель, поэтому имя двумерного массива есть указатель на указатель. Если последние 4 параметра должны изменяться, то перед ними либо * либо & как удобнее.
Вы начали за здравие, а кончили за упокой. Действительно, двумерный массив есть одномерный массив одномерных массивов. Однако все, что вы написали после этой фразы, не верно.
Во-первых, массив не является указателем! Просто в выражениях, где задается имя массива, в том числе и при передаче аргументов функции, имя массива преобразуется в указатель на его первый элемент. Так как массив из вопроса двумерный, то он преобразуется в указатель на первый элемент, которым в свою очередь является одномерный массив. Поэтому двумерный массив преобразуется в указатель на одномерный массив, а не в указатель на указатель, как вы написали!

Например, если имеется массив

Код:
T a[M][N];
то при передаче его как аргумента в функцию, он преобразуется к указателю

Код:
T ( * )[N];
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 27.10.2011, 17:15   #7
bajaka
 
Регистрация: 22.06.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
В том объявлении, которое вы используете, значения размерности массивов должны быть константными выражениями. То есть нельзя писать так

Код:
int ( &m )[N][M]
если N и M - это некоторые переменные, а не числовые константы.
Дак дело в том,что N и M - это числовые константы...
bajaka вне форума Ответить с цитированием
Старый 27.10.2011, 21:41   #8
bajaka
 
Регистрация: 22.06.2011
Сообщений: 7
По умолчанию

Ответьте пожалуйста конкретнее,как передать двумерный массив в функцию,точнее напишите примерный код,например обнуления переданного массива внутри функции!Заранее благодарю!
bajaka вне форума Ответить с цитированием
Старый 28.10.2011, 19:52   #9
Yur@Karpov1994
 
Регистрация: 09.06.2010
Сообщений: 4
По умолчанию

3. Написать функцию, которая вычисляет количество столбцов матрицы, не содержащих число, полученное функцией в качестве второго аргумента.

#include "tchar.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "locale.h"
#include "time.h"
#include "Math.h"
int iCol(int iArray[4][4],int a)
{
int k=0;
bool bC=false;
for (int i=0; i<4; i++)
{
for (int j=0; j<4; j++)
if (iArray[j][i]==a)
{
bC=false;
break;
}
else
bC=true;
if(bC==true)
k++;
}
return k;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(0,"");
srand(time(NULL));
int iArr[4][4];
for (int i=0; i<4; i++)
for (int j=0; j<4; j++)
iArr[i][j]=rand()%10+1;
printf("Массив\n");
for (int i=0; i<4; i++)
{
for (int j=0; j<4; j++)
printf("%5i",iArr[i][j]);
printf("\n");
}
printf("\n Количество столбцов в которых нет числа 4 == %d \n",iCol(iArr,4));
return 0;
}


вот тут передал двумерный массив в функцию. Потестил вроде работает как надо.
Yur@Karpov1994 вне форума Ответить с цитированием
Старый 27.11.2011, 16:17   #10
bajaka
 
Регистрация: 22.06.2011
Сообщений: 7
По умолчанию

А поменьше код можно?Конкретного способа(правильного по синтаксису) не существует что-ли?
bajaka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача двумерного массива в функцию FelixXXI Общие вопросы C/C++ 3 27.08.2011 18:08
[C++ Builder] Передача двумерного массива в функцию newStudent Помощь студентам 1 26.11.2010 10:46
Передача двумерного массива в функцию StudentPolitech Общие вопросы .NET 9 30.10.2010 22:20
Передача в функцию двумерного массива структур Spandei Общие вопросы C/C++ 1 21.05.2010 01:11
Передача двумерного массива в функцию Megapixar Общие вопросы C/C++ 12 01.04.2010 16:04