![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
GanZaleZ |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.7.2003 Репутация: нет Всего: нет |
попробуй передать
int i[2][2]; f(i[2]); поидее веть имя массифа яфляеца указателем на перфый элемент , а элементы перфого масива яфляюца указателями на вторые масифы ! ![]() ![]() А такая на фид простенькая задачка ![]() ![]() |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Неверное представление о статических массивах. Двумерный статический массив на самом деле - одномерный, но его логически можно представить как двумерный. А если функция считает, что ей передали указатель на массив указателей, она возможно и отработает без эксцепшона, но все равно неправильно -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
GanZaleZ |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.7.2003 Репутация: нет Всего: нет |
Ну это ясево что он одномерный
![]() ![]() |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
![]() Ну простите за неточность... Я имел ввиду, что он располагается в памяти одним непрерывным куском -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
Freeman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 29.11.2003 Репутация: нет Всего: нет |
Может понравиться, все равно я не долго думал
![]() #include <iostream.h> void f(int **h, int a, int b) { int *s; s=new int[a*b]; s=(int *)h; for(int i=0; i<a; i++) for(int j=0; j<b; j++) cout << *(s + i*b + j) << ' '; } void main() { int a[2][4]={{1,2,3,4},{10,20,30,40}}; f((int**)a, 2, 4); } |
|||
|
||||
Freeman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 29.11.2003 Репутация: нет Всего: нет |
![]() Это сообщение отредактировал(а) Freeman - 1.12.2003, 03:40 |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Что это? ![]() -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
Freeman |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 29.11.2003 Репутация: нет Всего: нет |
Ну как что , создание динамического массива общей размерностью a*b, чтобы компилятор знал размер памяти на которую указывает s или h, это точно работает проверял |
||||
|
|||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
С таким же успехом будет работать и следующий код, зато без утечек памяти
![]()
-------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
Freeman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 29.11.2003 Репутация: нет Всего: нет |
Ну ладно согласен , будет работать, но важна идея
![]() ![]() |
|||
|
||||
Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
по-моему, неплох такой вариант:
#include <iostream> void f(int **a,int n,int m) { std::cout<<a[0]<<std::endl; for (int i=0;i<n;++i) { for (int j=0;j<m;++j) { std::cout<<a[i][j]<<" "; } std::cout<<std::endl; } } typedef int *pint; int main(int argc, char* argv[]) { const int n = 3; const int m = 2; int i1[n][m] = {{1,2},{3,4},{5,6}}; int **i2 = new pint[n]; int **i3; int i = 0; for (i=0;i<n;++i) { i2[i] = new int[m]; for (int j=0;j<m;++j) { i2[i][j] = (n-1)*i + j + 1 + 100; } } i3 = new pint[n]; for (i=0;i<n;++i) { i3[i] = i1[i]; // скопировать только указатели, а не значения, // так что невелика потеря времени и памяти } f(i2,n,m); //dynamic f(i3,n,m); //static return 0; } |
|||
|
||||
Mellorn |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.12.2003 Репутация: 1 Всего: 1 |
Вот вы все используете такую весч!
void tratata(int ** array) - сколько помню себя кодющим "**" было указателем на указтель.. это ведь не двойной массив... (во всяком случае мой компилятор матерится почем зря) _________________________ С уважение Мэл. прошу обьясните мне эту фичу с ** =) |
|||
|
||||
Mellorn |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.12.2003 Репутация: 1 Всего: 1 |
P.S ->
Полностью согласен потому и задал вопрос вышк |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |