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

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

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

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

04.05.2009, 18:43. Просмотров 2440. Ответов 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?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2009, 18:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странности с typedef (C++):

Typedef - C++
Наткнулся на пример ниже: typedef char *cstring; //Каков тип переменной cstr в следующем объявлении: const cstring cstr; ...

Typedef - C++
Доброго времени суток. Привожу вам отрывок из книги "C и Visual C++ 2008 для начинающих". В книге приведен пример объявления структуры с...

typedef - C++
Доброго времени суток, уважаемые программисты! Не могу понять несколько строк из примера учебника Дейтела. С первой строкой все понятно,...

typedef - C++
Сталкнулся с таким объвлением typedef __mpz_struct mpz_t; Не могу врубится что оно значит? ...

typedef в c++ - C++
Здравствуйте! Нужно собрать полную информацию по оператору typedef в c++. Пока нашел, что typedef используется для задания новых...

typedef - C++
double f(double x){ } typedef double (*TPF)(double); TPF fff = f; fff(10.0); как и почему это работает корректно, если в...

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

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

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

    m == &m[0][0]
а если она динамическая, то сначала выделяется массив указателей под строки (каркас), а потом выделяются строки и подключаются в него
тогда обращение к элементам всё равно возможно через m[0][0], но m будет указателем на каркас
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2009, 14:01
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2009, 14:01
Ответ Создать тему
Опции темы

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