Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
#1

Странности с typedef - C++

04.05.2009, 18:43. Просмотров 2372. Ответов 7
Метки нет (Все метки)

В задании нужно определить с помощью typedef массив char.Пишу в header-файле:
C++
1
typedef char masschar[5];
Потом делаю так:
C++
1
masschar cfg[7];
И код компилируется только с
C++
1
2
3
/media/Part2/C++/Projects/CodeBlocks/5.9/declarations.cpp||In function ‘void declarations():|
/media/Part2/C++/Projects/CodeBlocks/5.9/declarations.cpp|22|предупреждение: unused variable ‘cfg’|
||=== Build finished: 1 errors, 0 warnings ===|
Почему нет ошибки о неверной размерности?Или память выделяется только при определении реальной переменной masschar cfg[7],а не при объявлении?Что происходит при попытке инициализации и использовании элементов,выходящих за размерность,указанную в typedef?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2009, 18:43     Странности с typedef
Посмотрите здесь:

typedef C++
typedef C++
typedef в c++ C++
C++ Про typedef
C++ Пояснение typedef
C++ Наследование typedef'a
Спецификатор typedef C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.05.2009, 19:03     Странности с typedef #2
C++
1
typedef char masschar[5];
Здесь ты определил синоним masschar для символьного массива длиной 5 символов, т.е. sizeof(masschar) == 5
C++
1
masschar cfg[7];
Здесь ты определил массив из семи masschar'ов, т.е. символьную матрицу 7*5, т.е. sizeof(cfg) == 35
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.05.2009, 05:50     Странности с typedef #3
Код
    cfg[7];
это семь пятисимвольных массивов (иными словами char arr[7][5])
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
06.05.2009, 08:12  [ТС]     Странности с typedef #4
Ещё немного про typedef: необходимо определить массив из 8 массивов по 7 указателей на целые.
1)Я так понимаю,что это никак не двумерный массив,хотя размерность должна быть той же,так?
2)Объявляю так:
C++
1
2
typedef int *pint[7];
typedef pint megamassive[8];
Правильно? А одной строчкой как-то можно?
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
06.05.2009, 08:41     Странности с typedef #5
#pragma,
1)Я так понимаю,что это никак не двумерный массив,хотя размерность должна быть той же,так?
очень даже двухмерный.

А одной строчкой как-то можно?
можно но чем сложнее тип, тем запутаннее запись.
в таких телегах потом разбираться...
typedef int* megamassive[8][7];
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.05.2009, 05:02     Странности с typedef #6
Цитата Сообщение от #pragma
необходимо определить массив из 8 массивов по 7 указателей на целые
это представить вообще просто, у тебя обычная таблица со строками и столбцами, у которой в каждую ячейку можно записать адрес
хочешь, например, упорядочить матрицы, ты их создаёшь, потом делаешь простую таблицу, расчитанную на их количество (например 2x2 для четырёх матриц) и в каждую клетку записываешь адрес одной матрицы
считай, можно так объединять не только матрицы, а уже созданные подобные матричные объединения (объединяя такие таблицы адресов точно так же - через адресы)
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
07.05.2009, 09:00  [ТС]     Странности с typedef #7
Цитата Сообщение от accept Посмотреть сообщение
это представить вообще просто, у тебя обычная таблица со строками и столбцами, у которой в каждую ячейку можно записать адрес
хочешь, например, упорядочить матрицы, ты их создаёшь, потом делаешь простую таблицу, расчитанную на их количество (например 2x2 для четырёх матриц) и в каждую клетку записываешь адрес одной матрицы
считай, можно так объединять не только матрицы, а уже созданные подобные матричные объединения (объединяя такие таблицы адресов точно так же - через адресы)
Запутанный ответ.. А что такое адрес матрицы?Это адрес её начала,то есть первого элемента?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2009, 14:01     Странности с typedef
Еще ссылки по теме:

Typedef C++
typedef C++
Typedef C++
C++ применение typedef

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.05.2009, 14:01     Странности с typedef #8
ну, если она статическая типа

Код
    int m[3][3];

    m == &m[0][0]
а если она динамическая, то сначала выделяется массив указателей под строки (каркас), а потом выделяются строки и подключаются в него
тогда обращение к элементам всё равно возможно через m[0][0], но m будет указателем на каркас
Yandex
Объявления
07.05.2009, 14:01     Странности с typedef
Ответ Создать тему
Опции темы

Текущее время: 09:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru