Сегмент данных для хранения констант Директива #define служит для замены часто использующихся констант,
ключевых слов, операторов или выражений некоторыми идентификаторами.
#define имя_макроса последовательность_символов
Функции стандартной библиотеки для работы со строками string.h
char *strcpy(char *dsk, char *src); \\ из src копирует в dsk
int strcmp(char *s1, char *s2); \\ сравнение строк,
char *strcat (char *s1, char *s2); \\ s2 дописывается к s1
сhar * strchr (char *str,char *substr); \\ возвращает указатель на первое вхождение substr в строке str
Функция strchr() возвращает указатель на местонахождение первого совпадения с символом c в строке s ... а если символ не найден, то возвращают NULL.
char *numbers = "01233210"; char *three = strchr(numbers, '3'); int strlen(char *s);-длина строки
char *strtok(char * str, char * delim); \\ разбивает фразу на лексемы
Функция strtok
#include <string.h>
char *strtok(char *str1, const char *str2);
Функция strtok() разбивает строку на лексемы. При каждом вызове возвращает адрес первой лексемы
возвращает указатель на следующую лексему в строке, адресуемой параметром str1. Символы, образующие строку, адресуемую параметром str2, представляют собой разделители, которые определяют лексему. При отсутствии лексемы, подлежащей возврату, возвращается нулевой указатель.
Пример
Эта программа разбивает строку "Травка зеленеет, солнышко блестит" на лексемы, разделителями которых служат пробелы и запятые. В результате получится
Травка|зеленеет|солнышко|блестит
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p;
p = strtok("Травка зеленеет, солнышко блестит", " ");
printf(p);
do {
p = strtok('\0', ", ");
if(p) printf("|%s", p);
} while(p);
return 0;
}
Пример использования массивов указателей
22) Указатели на функции.
Указатели на функции[1] —Функция располагается в памяти по определенному адресу, который можно присвоить указателю в качестве его значения. Адресом функции является ее точка входа. Именно этот адрес используется при вызове функции. Так как указатель хранит адрес функции, то она может быть вызвана с помощью этого указателя. Он позволяет также передавать ее другим функциям в качестве аргумента.
23) Описания в кот. встреч. [],(),* считаются сложными
25) typedef-позволяет задавать новые имена типов. Пример typedef int INT; INT x=5;
Конструкция typedef позволяет задавать новые имена типов.
Tupedef int INT
Т.е теперь типы одинаковы)
Язык C++ вслед за С позволяет писать функции с переменным числом аргументов. int f(…) Этот заголовок не вызывает у компилятора ошибок. Такая запись означает, что при определении функции компилятору неизвестны ни количество параметров, ни их типы, и он, естественно, не может ничего проверить. Количество параметров и их типы становятся известными только при вызове функции.
Функция sum
Препроцессор
Препроцессор С/С++ — программный инструмент, изменяющий код программы для последующей компиляции и сборки. препроцессор обеспечивает использование стандартного набора возможностей:
· Замена триграфов
??=, ??(, ??) (и других) символами #, [, ] · Замена комментариев пустыми строками
· Включение файла — #include
· Макроподстановки — #define
· Условная компиляция — #if, #ifdef, #elif, #else, #endif
Макросы в языке Си преимущественно используются для определения небольших фрагментов кода. Во время обработки кода препроцессором, каждый макрос заменяется соответствующим ему определением.
Макросы - это препроцессорные "функции" , т.е. лексемы, созданные с помощью директивы #define, которые принимают параметры подобно функциям.
Например,
#define max(a,b) ((a) > (b) ? (a) : (b))
Проблема связанная с макросами
#define SQUARE(x) ((x) * (x))
Считается хорошим стилем окружение в теле макроса скобками любых параметров, а также всего тела макроса, что позволяет избегать проблем, связанных с приоритетностью операторов. В конце концов нам нужно, чтобы запись 7 * SQUARE(2 + 3) разворачивалась в 7 * ((2 + 3) * (2 + З)), а не в 7 * 2 + 3 * 2 + 3.
Сравнение макросов и функций.
|