реклама
Бургер менюБургер меню

Зара Горенко – Мыслим на Си (страница 9)

18

Thinking = information processing?

Люди отвечали. Спорили. Объясняли. И с каждым днём мой словарный запас рос.

Часть 4: Переменные в Си – коробки для данных

Вернёмся к Си. Что такое переменная?

Переменная – это имя для куска памяти. Компьютер выделяет место в оперативной памяти и говорит: "Вот адрес 0x7ffd1234. Теперь этот адрес называется age".proza+1

Простейшая программа с переменной:

c#include <stdio.h>

int main() {

int age; // Объявляем переменную

age = 11; // Присваиваем значение

printf("Мне почти %d лет\n", age);

return 0;

}

Что происходит в памяти?

Компилятор видит int age; и резервирует 4 байта памяти

Эти 4 байта получают имя age

Команда age = 11; записывает число 11 в эти байты: 00 00 00 0B (в шестнадцатеричном)

printf читает эти байты и выводит их как число

Часть 5: Типы данных – грамматика Си

В Си нельзя просто сказать "создай переменную". Нужно указать тип – какие данные она будет хранить.

Это как части речи в языке. Нельзя сказать "слово". Нужно: "существительное", "глагол", "прилагательное".

int – целые числа

cint age = 11;

int temperature = -5;

int population = 1000000;

int хранит целые числа (обычно от -2,147,483,648 до 2,147,483,647). Занимает 4 байта.

char – символы

cchar letter = 'P'; // Первая буква PhoeNIX

char digit = '7';

char newline = '\n';

char хранит один символ. Занимает 1 байт.proza+1

Но секрет: char – это на самом деле маленькое целое число. Символ 'P' – это число 80 (код ASCII). 'h' – 104. 'o' – 111.

cchar letter = 'P';

printf("%c\n", letter); // Выведет: P

printf("%d\n", letter); // Выведет: 80

float – дробные числа

cfloat pi = 3.14159;

float temperature = -5.5;

float хранит числа с плавающей точкой. Занимает 4 байта. Точность – около 6-7 десятичных знаков.

double – дробные числа двойной точности

cdouble precise_pi = 3.141592653589793;

double – это float с двойной точностью. Занимает 8 байт. Точность – около 15-16 знаков.

Таблица типов

ТипРазмерДиапазонСпецификаторchar1 байт-128 до 127%c или %dint4 байта±2 млрд%dfloat4 байта±3.4×10³⁸%fdouble8 байт±1.7×10³⁰⁸%lf

Часть 6: Структуры – группы переменных

В моей программе для подсчёта слов я использовал структуру:

ctypedef struct {

char word[MAX_WORD_LEN];

int count;

} WordFreq;

Структура – это способ объединить несколько переменных в одну. Как коробка с отделениями: в одном отделении – слово (char word), в другом – счётчик (int count).

Создаём переменную типа структуры:

cWordFreq w;

strcpy(w.word, "think");

w.count = 89;

printf("Слово '%s' встречается %d раз\n", w.word, w.count);

// Слово 'think' встречается 89 раз

Точка . означает "обратиться к полю структуры".

Массив структур – это таблица:

cWordFreq words[10000]; // Массив из 10000 структур

words[0].word = "think";

words[0].count = 89;

words[1].word = "program";

words[1].count = 76;

Так я хранил словарь частотности.