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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 16:54   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию адресная переменная и двумерный массив?

1) Допустим, с обычным массивом понятно, переменная должна иметь тип соответствующий типу элементов массива.

А если массив двумерный? Компилятор ведь ругается.

Чё то недопру как адресной переменной передать адрес двумерного массива?

2) Почему запись **P равнозначна *p[] ?
jojahti вне форума
Старый 12.08.2009, 17:02   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Почему запись **P равнозначна *p[] ?
Как понять равнозначно?
Первое указатель на указатель, а второе массив указателей. В теории не одно и тоже.

Двумерный массив в С++ будет так
Код:
int array[12][12];
for (int i=0; i < 12; i++)
  for (int l =0; l < 12; l++)
    array[i][l] = i+l;

Последний раз редактировалось psycho-coder; 12.08.2009 в 17:17.
psycho-coder вне форума
Старый 12.08.2009, 17:20   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

psycho-coder
Ну к примеру компилятор в своих сообщениях показывает запись char *argv[], как char **argv.

Можно в коде вместо *argv[] написать **argv. И получится то же самое.

Вот я и хотел узнать каким образом из ссылки на ссылку получается массив? Или это просто две звёздочки с переменной, а не звёздочка с переменной со звёздочкой?

Ээ, а массив адресной переменной как передать?
=================================== ======
Цитата:
Двумерный массив в С++ будет так
Эмм, что "так"?

Мне надо в *ptr передать адрес int f[8][9]

И если с одномерным массивом эта операция проблем не вызывает, то с двухмерным чё то не получается никак.
=================================== ======
То есть сделать то же самое что и здесь, но только с двумерным массивом.
Код:
  int *ptr;
  int f[9];
  ptr = f;

Последний раз редактировалось jojahti; 12.08.2009 в 17:38.
jojahti вне форума
Старый 12.08.2009, 17:43   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

ну если так не проходит:
Код:
int f[8][9];
int *p = f;
то попробуйте с преобразованием:
Код:
int f[8][9];
int *p = (int*)f;
или так:
Код:
int f[8][9];
int *p = &f[0][0];
ЗЫ. Когда параметр функции объявлен как массив, он втихаря преобразуется в указатель, т.е. это:
Код:
void a(int a[])
{
...
}
и это:
Код:
void a(int *a)
{
...
}
одно и то же.
Аккуратнее с sizeof для параметров-массивов, а то неожиданный результат получиться может
pu4koff вне форума
Старый 12.08.2009, 18:18   #5
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

pu4koff
Вроде оба варианта на первый взгляд пашут.
Пасиб. ))

Ну со вторым понятно.
А вот первый эээ - это чё? Обман компилятора что ли?
jojahti вне форума
Старый 12.08.2009, 18:39   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от jojahti Посмотреть сообщение
pu4koff
Вроде оба варианта на первый взгляд пашут.
Пасиб. ))

Ну со вторым понятно.
А вот первый эээ - это чё? Обман компилятора что ли?
Явное преобразование типов просто. Ну типа говорим компилятору, что это на самом деле очень даже может быть указателем на int.
pu4koff вне форума
Старый 13.08.2009, 16:34   #7
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Да, но ведь теперь мне весь код переписывать, либо скобочную операцию перегружать, ведь обращаться можно только как к порядковуму элементу.

А может можно стандартным синтаксисом - [][], каким либо образом?

1) Перегрузка это конечно здорово но, чёрт возьми, как перегрузить двойную операцию скобки!!? :WALL: :WALL: :WALL:

2) Могу ли я перегрузить стандартный тип?

Последний раз редактировалось MaTBeu; 14.08.2009 в 15:06.
jojahti вне форума
Старый 13.08.2009, 18:31   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Так пойдёт?
Код:
// Исходная матрица 7х8
int **a = new int*[7];
for (int i = 0; i < 7; ++i)
  a[i] = new int[8];
...
// Передача указателя на матрицу в другую переменную
int **b = a;
// Вот оно обращение к элементам посредством скобочек
b[5][4] = 8;
...
// Очистка памяти
for (int i = 0; i < 7; ++i)
  delete[] a[i];
delete[] a;
pu4koff вне форума
Старый 13.08.2009, 18:42   #9
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Ух, ёлки иголки!!
В с++ можно всё, только для этого нужно знать весь язык целиком.
P.S. А как репу кому-нибудь повысить?

Последний раз редактировалось jojahti; 13.08.2009 в 18:44.
jojahti вне форума
Старый 13.08.2009, 19:00   #10
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

MaTBeu: вашу налево, это не флуд тема. На общие темы в ЛС общайтесь!!!

Последний раз редактировалось MaTBeu; 14.08.2009 в 15:08.
jojahti вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив как структурная переменная mazak Общие вопросы C/C++ 8 15.07.2009 21:55
Двумерный массив Veroni4ka Помощь студентам 3 12.05.2009 11:09
Двумерный массив Wi1D Помощь студентам 0 10.12.2008 00:29
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25