Краткий справочник по языку Си

  • 18 окт. 2016 г.
  • 1547 Слова
Краткий справочник по языку Си


… или Hello World на Си




// Однострочный комментарий

/*
Многострочный комментарий
*/

true — верно
false — не верно

Подключение файлов с помощью #include
#include
#include
#include


Файлы в < угловых скобочках > будут подключаться из стандартной библиотеки.
Свои файлы необходимо подключать с помощью " двойных кавычек ".#include "header.h"


Объявление функций должно происходить в .h-файлах или вверху .c-файла.
void function_1();
void function_2();


Точка входа в программу – это функция main.
int main()
    {
        Ваш код
    }


Для вывода в консоль используется printf

%d – означает, что будем выводить целое число

\n переводит указатель на новую строчку
printf("%d\n", 0);

Напечатает 0


Типы


int обычноимеет длину 4 байта
int x_int = 0;


short имеет длину 2 байта
short x_short = 0;


char имеет длину 1 байт
char x_char = 0;


Одиночные символы заключаются в ' одинарные кавычки '
char y_char = 'y';


long как правило занимает от 4 до 8 байт
long long занимает как минимум 64 бита
long x_long = 0;
long long x_long_long = 0;


float это 32-битное число с плавающей точкой (дробное число)
floatx_float = 0.0;


double это 64-битное число с плавающей точкой
double x_double = 0.0;


Целые типы могут быть беззнаковыми
unsigned short ux_short;
unsigned int ux_int;
unsigned long long ux_long_long;


sizeof(T) возвращает размер переменной типа Т в байтах
sizeof(object) возвращает размер объекта object в байтах.
printf("%zu\n", sizeof(int));


Если аргуметом sizeof будет выражение, то этот аргументвычисляется во время компиляции кода (кроме динамических массивов)
int a = 1;


size_t это беззнаковый целый тип который использует как минимум 2 байта для записи размера объекта
size_t size = sizeof(a++); // a++ не выполнится

printf("sizeof(a++) = %zu, где a = %d\n", size, a);

Выведет строку «sizeof(a++) = 4, где a = 1» (на 32-битной архитектуре)

Можно задать размер массива при объявлении
charmy_char_array[20]; // Этот массив занимает 1 * 20 = 20 байт

int my_int_array[20]; // Этот массив занимает 4 * 20 = 80 байт (сумма 4-битных слов)


Можно обнулить массив при объявлении
char my_array[20] = {0};


Индексация массива происходит также как и в других Си-подобных языках
my_array[0];


Массивы изменяемы, как и другие переменные
my_array[1] = 2;
printf("%d\n", my_array[1]);


Массив можетбыть объявлен динамически, размер не обязательно рассчитывать при компиляции
printf("Enter the array size: "); // спрашиваем юзера размер массива
char buf[0x100];
fgets(buf, sizeof buf, stdin);
size_t size = strtoul(buf, NULL, 10); // strtoul парсит строку в беззнаковое целое
int var_length_array[size]; // объявление динамического массива
printf("sizeof array = %zu\n", sizeof var_length_array);Вывод программы (в зависимости от архитектуры) будет таким:
sizeof array = 40


Строка – это просто массив символов, оканчивающийся нулевым (NUL (0x00)) байтом, представляемым в строке специальным символом '\0'. Его не нужно вставлять в строку, компилятор всё сделает сам.

%s — означает, что будем выводить строку
char a_string[20] = "This is a string";
printf("%s\n", a_string);

printf("%d\n",a_string[16]);

напечатает 0
17, 18, 19 и 20-ый байты, тоже будут равны нулю

Если между одинарными кавычками есть символ – это символьный литерал, но это тип int, а не char (по историческим причинам).
int cha = 'a'; // правильно
char chb = 'a'; // тоже правильно, int преобразовывается в char



Операторы


Переменные можно объявлять через запятую
int i1 = 1, i2 = 2;
float f1 = 1.0, f2 = 2.0;


Арифметика
i1+ i2; // => 3
i2 - i1; // => 1
i2 * i1; // => 2
i1 / i2; // => 0 (0.5, но обрезается до 0)
f1 / f2; // => 0.5, плюс-минус погрешность потому что, цифры с плавающей точкой вычисляются неточно!


Операции сравнения

== — равно
!= — не равно (символ ! — отрицание, применяется в разных конструкциях)
>, < — больше-меньше
<= — меньше или равно
>= — больше или равно
3 == 2; // неверно
3 != 2;...
tracking img