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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 21:39   #1
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию Передача адреса двухмерного массива в функцию.

Подскажите пожалуйста, как можно передать адрес двухмерного массива функции.
Акоб вне форума Ответить с цитированием
Старый 27.03.2011, 21:49   #2
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
void foo(int (*mass)[5][6])
{
printf("%d\n", (*mass)[0][0]);
}

int mass[5][6];
foo(&mass);
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 27.03.2011, 21:55   #3
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

А какая разница?Одномерный массив передается так
Код:
void foo(int *mass)
{
cout<<"ku-ku"endl;
}

int mass[50];
foo(mass);
Зачем нужны такие сложности при передаче двухмерного массива???
Акоб вне форума Ответить с цитированием
Старый 27.03.2011, 22:18   #4
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

потому что ты просил передать АДРЕС двумерного массива.

в твоем примере ты передаешь указатель на первый элемент массива, разные вещи.

передать адрес на первый элемент двумерного массива (т.е на первую строку) можно так:
Код:
void foo(int (*mass)[6])
{
cout << mass[0][0];
}
но так же, как и с одномерным массивом, нужно помнить размерность двумерного массива. эта запись аналогична этой
Код:
void foo(int mass[][6]) {}
или этой
void foo(int mass[5][6]) {}
или этой
void foo(int mass[100500][6]) {}
ибо все это превращается в
void foo(int (*mass)[6]) {}
т.е ты сам должен знать размерность массива

но я люблю явно указать (*mass)[6]. сразу ясно, что функция принимает указатель на одномерный массив из 6 элементов, за которыми есть (или может не быть) еще N таких одномерных массивов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 27.03.2011 в 22:20.
pproger вне форума Ответить с цитированием
Старый 27.03.2011, 22:21   #5
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

В током случае какая разница между передачей указателя и передачей адреса?
Акоб вне форума Ответить с цитированием
Старый 28.03.2011, 12:31   #6
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
В током случае какая разница между передачей указателя и передачей адреса?
не распарсил.
массив можно передать в функцию двумя способами.
1. указателем на первый элемент
2. указателем на сам массив

какая в них разница? во втором случае адрес массива можно поменять (если массив динамический), как и адрес любой переменной, переданной в функцию по указателю, а не по значению
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.03.2011, 14:31   #7
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Тогда еще один вопрос, можно ли указать на первый элемент двухмерного массива?
Акоб вне форума Ответить с цитированием
Старый 29.03.2011, 14:33   #8
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

я же тебе привел пример уже
Цитата:
передать адрес на первый элемент двумерного массива (т.е на первую строку) можно так:
Код:
void foo(int (*mass)[6])
{
cout << mass[0][0];
}

int mass[5][6];
foo(mass);
первый элемент двумерного массива - это первая строка, т.е первый одномерный массив
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.03.2011, 14:53   #9
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Понял,спасибо
Акоб вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача двухмерного массива в функцию tem_80 Общие вопросы C/C++ 3 18.02.2011 23:47
Передача массива в функцию D[I]K Общие вопросы C/C++ 4 13.09.2009 21:31
передача массива в функцию JOFRIF Общие вопросы C/C++ 8 02.08.2009 12:46
Передача массива в функцию Vistar Общие вопросы C/C++ 1 27.04.2009 08:08
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11