- •Конспект лекций по предмету
- •Раздел 1. Основы языка.
- •Тема 1. История создания языка Си. Достоинства языка. Использование языка Си.
- •Тема 2.
- •Структура простой программы.
- •Описание переменных.
- •3.Использование комментариев. Читаемость.
- •Зарезервированные слова.
- •Раздел.2 Элементы языка. Выражения.
- •Тема 3.
- •3. Выражения
- •Раздел 3. Операторы языка. Условный оператор if
- •Оператор switch
- •Операторы цикла
- •Цикл с параметром (for)
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Раздел 4. Указатели и массивы Указатели
- •Инициализация указателей
- •Присваивание указателю адреса существующего объекта:
- •Присваивание указателю адреса области памяти в явном виде:
- •Присваивание пустого значения:
- •Выделение участка динамической памяти и присваивание её адреса указателю:
- •Внимание!
- •Объявляется массив из 10 указателей на функции без параметров, возвращающих указатели на int.
- •Раздел 5. Строки. Работа со строковыми данными
- •Функции работы со строками и символами
- •Символьные строки и строковые функции
- •Ввод-вывод строк средствами с.
- •1) Scanf, printf – вводит/выводит одно слово:
- •2) Ввести предложение:
- •3) Специальные средства ввода – вывода строк – gets и puts
- •Различия между массивом символов и указателем на строку
- •Массивы строк
- •Функции с для обработки строк
- •Strcat(), strncat(). Соеденение строк.
- •Другие функции для строк(краткое описание)
- •Раздел 6. Структуры. Структуры (struct)
- •Раздел 7. Функции (подпрограммы). Функции
- •Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Раздел 8. Файлы(потоки) Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод в поток
- •Закрытие потока
- •Обработка ошибок
Различия между массивом символов и указателем на строку
Пример:
Char s1[]=”Я люблю кошек!”; // длина массива определяется автоматически
Char *s2=”Я люблю собак!”;
Главное различие s1-переменная строка,
s2-константа строка
Общее:
Для посимвольного вывода можно пользоваться и методом s1[i], s2[i] и методом *(s1+i), *(s2+i).
Например выведем «Я люблю» из s1 и s2:
На экране будет
Я люблю
Я
люблю
putchar(s1[i]);
putchar(‘\n’);
for (i=0; i<=6; i++)
putchar(s2[i]);
Сделаем то же самое другим способом:
На экране будет
тоже
Я люблю
Я
люблю
putchar(*(s1+i));
putchar(‘\n’);
for (i=0; i<=6; i++)
putchar(*(s2+i));
Различие:
Операцию «++» можно применять только к указателям:
while (*(s2)!=’\0’) // пока не конец строки
putchar(*(s2++)); // печать символа и увеличение указателя на 1 байт
Я люблю собак!
Будет выведено:
*s2 – переменная указатель. Раньше она указывала на константу «Я люблю собак!».
Её можно изменить присвоив этой переменной адрес массива s1: s2=s1;
Теперь s2 указывает на строку «Я люблю кошек!»
Массивы строк
Сравним массив указателей на char *fruct и массив символов fruct
static char fruct[3][7] = {“Дыня”,”Груша”,”Персик”}
0 |
Д |
Ы |
Н |
Я |
\0 |
\0 |
\0 |
\0 |
1 |
Г |
Р |
У |
Ш |
А |
\0 |
\0 |
\0 |
2 |
П |
Е |
Р |
С |
И |
К |
\0 |
\0 |
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Это массив [3] символьных массивов [7], т.е. масив значений типа char содержащий 3 символьных массива
Эти значения можно менять
Занимает 21 байт
static char *fruct[3]= {“Дыня”,”Груша”,”Персик”}
Д |
Ы |
Н |
Я |
\0 |
|
|
|
Г |
Р |
У |
Ш |
А |
\0 |
|
|
П |
Е |
Р |
С |
И |
К |
\0 |
|
Это массив указателей char.
Содержит 3 адреса.
Эти сроковые константы нельзя изменить
занимает 5+6+7=18 байт
Функции с для обработки строк
(описаны в заголовочном файле string.h)
strlen() - определение длины строки
strcat() – объеденение строк
strncat() - объеденение строк, а также sprintf (stdio.h)
strcmp() – сравнивание строк
strncmp() - сравнивание строк
strcpy() – копирование строк
strncpy() – копирование строк
другие функции – кратко.
strlen(). Определяет длину строки (фактическую, не включая \0)
Например, усечем строку str до указанной длины 13 с помощью функции fit
в программе проверки усечения строк:
#include <stdio.h>
#include <string.h> // для строковых функций
void fit(char *str1, unsigned int n1);
int main(void)
{ char str[]=”Держите шляпы, хакеры!”;
puts(str) ;
fit(str,13);
puts(str);
return 0;
}
void fit(char *str1, unsigned int n1)
{ if (strlen(str1)>n1) str1[n1]=’\0’; // в 13 элемент масива записывается конец с
// или: *(str+n1)=’\0’
}
Держите шляпы,
хакеры! Держите
шляпы
Будет выведено:
