![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Anikmar, следует не забывать, что b - const int*
Это сообщение отредактировал(а) Xenon - 22.12.2006, 16:43 |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Естественно не может, но если попробовать так:
Спору нет - естественно. В статическом варианте при попытке сделать так: char **a; char b[3][2]; a = b; Компилятор выдаст ошибку о преобразовании типов и напишет примерно следующее "Не могу преобразовать char*[2] в char** У меня именно так выдал - из этого я сделал вывод, что статическое объявление компилятор также считает массивом указателей. |
||||
|
|||||
| KelTron |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: нет Всего: 38 |
Если точнее то имя массива - указатель на его первый элемент
Скорее массивом указателей int *a[2], а указателем на массив указателей является a (int** a) -------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
У всех так выдает. Но это ситуации не меняет. Читаем Страуструпа и Стандарт. Компилер в этом случае трактует получившееся как массив указателей. Но указателя на указатели там нет. |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Это уже к семантике русского языка. Массив указателей или указатель на указатели... В общем вы поняли Я имел в ввиду типы переменных. объявление int a[5]; С точки зрения С++ типом переменной a является "Указатель на int" А вот значение этого указателя указывает на первый элемент массива. |
|||
|
||||
| KelTron |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 8.10.2006 Где: Красноярск Репутация: нет Всего: 38 |
Anikmar, так тоже верно
-------------------- Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог. Эвенгар Салладорский, основатель Школы Тьмы. |
|||
|
||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Нет, не к семантике русского языка.
Нет, не является. Читаем, опять-таки, Страуструпа. a - не переменная даже, так как она не имеет типа. При объявлении массива char a[3][2]; в памяти не выделяется ни байта ни под один указатель. Это сообщение отредактировал(а) JackYF - 22.12.2006, 17:44 |
||||
|
|||||
| lasalexx |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 19.7.2004 Где: Tbilisi Репутация: нет Всего: 1 |
вот уже несколько дней думаю как можно передать статистический масив функции. в конце концов сделал вот так:
но выдает ошибку:
а ведь когда делаю с одномерным масивом
всё нормально получается. Так в чём разница? И можно ли вообще сделать то что я хочу не используя динамическую память? |
||||||
|
|||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
|
|||
|
||||
| lasalexx |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 19.7.2004 Где: Tbilisi Репутация: нет Всего: 1 |
Но тут MyArray матрица 3х4, а я хочу что б функция работала на все размеры. |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
JusTalionis, тогда используй двойной указатель(**) и динамическое выделение памяти
|
|||
|
||||
| threef |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Нет необходимости использовать динамическое выделение памяти. А вот внутри функции придется "попотеть" - две квадратных скобки работать откажутся.
Добавлено @ 17:25 или проще :
Это сообщение отредактировал(а) threef - 23.2.2007, 17:23 |
||||
|
|||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Ну если С-style не принципиален, то:
Это сообщение отредактировал(а) Daevaorn - 23.2.2007, 17:31 |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
]threef, это извращения, зачем так издеваться над своим (и чужим мозгом), когда проще выделить память динамически..
|
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
vinter, извращения - это то, к чему ты не привык ? Так и пиши, "мне это не нравится". Остальное - тема для обсуждения, а не "извращения". Посчитай обращения к менеджеру кучи при динамическом выделении памяти так, как это предлагаешь ты. А не хочешь издеваться над мозгом - пользуй готовые коллекции.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |