|
|||||||
Правила чтения сложных описаний типов в языке C и C++
Время создания: 02.02.2024 10:43
Текстовые метки: c++, си++, тип, правила, сложный, составной, определение, объявление, синтаксис, указатель, ссылка, массив, функция, выражение
Раздел: Компьютер - Программирование - Язык C (Си)
Запись: xintrea/mytetra_syncro/master/base/17068598312dvznjxsn5/text.html на raw.github.com
|
|||||||
|
|||||||
Правила чтения сложных описаний типовКонструкции, определяющие переменные или вводящие новые типы в языках C и C++, могут порой иметь довольно запутанный вид. Ниже дано правило, помогающее разобраться в смысле сложных конструкций.
Вот некоторые примеры “расшифровки” типов переменных: // c (влево) константа char (const и char можно поменять местами): const char c; // str (влево) указатель на (влево) константу char (или константный массив из char): const char* str; // str (влево) константный (влево) указатель на константу char: const char* const str; // n (вправо) массив (вправо) из 10 (влево) int: int n[10]; // n (вправо) массив (вправо) из 10 (влево) указателей на (влево) int: int* n[10]; // n (влево) указатель на (вправо) массив из 10 (влево) указателей на int: int* (*n)[10]; // n указатель на массив из 10 (влево) указателей на (вправо) функции, // не принимающие аргументов, (влево) возвращающие указатели (влево) // на константы типа int: const int* (*(*n)[10])(); Разница между typedef и usingДиректива typedef объявляет синоним типа. Используется синтаксис определения переменной, к которой добавили ключевое слово typedef, только вместо собственно переменной вводится синоним типа этой как-бы переменной с её именем. int * p; // переменная: указатель на int typedef int * pt; // имя pt -- синоним типа "указатель на int" pt px; // тоже переменная типа "указатель на int" В С++11 появилась возможность объявлять синонимы типов с помощью using-директивы в стиле инициализации переменных: using pointer = type*; Объявление typedef можно превратить в using-директиву, заменив typedef на using, вставив после using имя типа и знак равно и убрав это имя типа из объявления справа. // то же, что typedef double (*Binary_op)(double, double); using Binary_op = double (*)(double, double); Типы, ассоциируемые с массивамиПусть N — константа времени компиляции и дано определение float a[N]; Тогда
Типы, ассоциируемые с функциямиПусть дано объявление float foo(int, int); Тогда
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|