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

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

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

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

04.05.2009, 18:43. Просмотров 2417. Ответов 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 int (*LPMYDLLFUNC)(int,int); после данного typedef, LPMYDLLFUNC используется как указатель на функцию, принимающую два...

Использование Typedef - C++
Читал книгу по паттернам и натолкнулся на такой пример в паттерне command: template<class Receiver> class SimpleCommand : public...

Improper use of typedef - C++
В структурах : struct ActionController { public : int Signature; int ID; int ndx; int ActionSetsCount; ActionSet *...

Typedef и функция - C++
есть такая функция void implicitCurve(const double* x, double* y, double* Df) { // funkcyja f(a,b,c) =...

применение typedef - C++
Какова роль "*node"(последняя строка) в данном случае? typedef struct rbtree_node { enum color color; void *key; void *value; ...

тип typedef - C++
можете кинуть какую нибудь программу с преобразованием типа typedef (С++), очень срочно нужно..

Наследование typedef'a - C++
Итак, в некотором классе typedef'ом определен тип: template<typename T> class Shape { public: typedef T sclar; }; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 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
4821 / 3241 / 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
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
06.05.2009, 08:41     Странности с typedef #5
#pragma,
1)Я так понимаю,что это никак не двумерный массив,хотя размерность должна быть той же,так?
очень даже двухмерный.

А одной строчкой как-то можно?
можно но чем сложнее тип, тем запутаннее запись.
в таких телегах потом разбираться...
typedef int* megamassive[8][7];
accept
4821 / 3241 / 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
Еще ссылки по теме:

Отличия using и typedef - C++
Всем привет. Собственно вопрос в чем различия при использовании: using size_type = unsigned long; и typedef unsigned...

Спецификатор typedef - C++
Не могу понять как работает спецификатор typedef... Прочитал про него достаточно инфы и он везде сравнивается с директивой #define с той...

работа с typedef - C++
Объясните пожалуйста в чем смысл конструкции: typedef struct _XMFLOAT2 { FLOAT x; FLOAT y; } XMFLOAT2; typedef создает...

Про typedef - C++
Читаю книгу Дейтела наткнулся на программу, в которой не могу понять одну деталь, а именно смотрим в комментариях ниже. #include...

_W64 в typedef - C++
Что такое _W64? typedef _W64 int ptrdiff_t;


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 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
Ответ Создать тему
Опции темы

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