Типы данных в C

Здравствуйте, будущие программисты! Добро пожаловать в наше захватывающее путешествие в мир программирования на языке C. Сегодня мы отправимся в fascinierende царство типов данных в C. Не волнуйтесь, если вы новички в программировании; я буду вашим дружелюбным проводником, и мы будем разбираться с этой темой шаг за шагом. Так что возьмите любимый напиток, устройтесь поудобнее и погружайтесь с нами!

C - Data Types

Целочисленные типы данных в C

Давайте начнем с чего-то знакомого - целых чисел. В C мы называем их整数ами, и они бывают разных размеров и вкусов.

Основные целочисленные типы

Вот таблица самыхcommon целочисленных типов в C:

Тип данных Размер (байты) Диапазон
char 1 -128 до 127 или 0 до 255
short 2 -32,768 до 32,767
int 4 -2,147,483,648 до 2,147,483,647
long 4 или 8 -2,147,483,648 до 2,147,483,647 или -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807

Теперь посмотрим, как они работают:

#include <stdio.h>

int main() {
char my_char = 65;
short my_short = 32000;
int my_int = 2000000000;
long my_long = 9000000000L;

printf("char: %c\n", my_char);
printf("short: %d\n", my_short);
printf("int: %d\n", my_int);
printf("long: %ld\n", my_long);

return 0;
}

Когда вы запустите этот код, вы увидите:

char: A
short: 32000
int: 2000000000
long: 9000000000

Давайте разберем это:

  • Значение char 65 соответствует 'A' в таблице ASCII. Удивительно! char может хранить числа тоже!
  • short и int работают как预期 для средних чисел.
  • Для long мы добавляем 'L' в конце, чтобы告诉 C, что это длинное число.

Беззнаковые целые числа

Иногда нам нужны только положительные числа. Вот где на помощь приходят беззнаковые целые числа:

unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;

printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);

Результат:

unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000

Используя unsigned, мы можем хранить большие положительные числа в том же количестве памяти. Это как магия, но это просто умелое использование бит!

浮点数据类型在C中

Теперь перейдем к десятичным числам. C предоставляет три типа с浮点ными запятыми:

Тип данных Размер (байты) Точность
float 4 6-7 десятичных знаков
double 8 15-16 десятичных знаков
long double 16 19-20 десятичных знаков

Давайте посмотрим, как они работают:

#include <stdio.h>

int main() {
float pi_float = 3.14159265358979323846f;
double pi_double = 3.14159265358979323846;
long double pi_long_double = 3.14159265358979323846L;

printf("float: %.7f\n", pi_float);
printf("double: %.16f\n", pi_double);
printf("long double: %.20Lf\n", pi_long_double);

return 0;
}

Результат:

float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846

Обратите внимание, как float теряет точность после 7 знаков, в то время как double и long double поддерживают большую точность. Это как увеличение цифрового фото - в какой-то момент вы начинаете видеть пиксели!

Пользовательские типы данных в C

C позволяет нам создавать свои собственные типы данных. Это как быть шеф-поваром и создавать свои рецепты!

Структуры

Структуры позволяют нам grouping-related данные вместе:

#include <stdio.h>
#include <string.h>

struct Student {
char name[50];
int age;
float gpa;
};

int main() {
struct Student alice;
strcpy(alice.name, "Alice");
alice.age = 20;
alice.gpa = 3.8;

printf("Name: %s\n", alice.name);
printf("Age: %d\n", alice.age);
printf("GPA: %.1f\n", alice.gpa);

return 0;
}

Результат:

Name: Alice
Age: 20
GPA: 3.8

Здесь мы создали тип Student, который объединяет имя, возраст и средний балл вместе. Это как создание формы для информации о студенте!

Перечисления

Перечисления伟大 для создания набора именованных констант:

#include <stdio.h>

enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};

int main() {
enum Days today = WED;
printf("Today is day number %d\n", today);
return 0;
}

Результат:

Today is day number 3

Перечисления автоматически присваивают возрастающие целые значения, начиная с 0. Это как давать прозвища числам!

Special Data Type void in C

void - это особый тип в C. Это как чистый холст - он представляет собой отсутствие данных. Мы в основном используем его в трех сценариях:

  1. Функция не возвращает ничего:

    void sayHello() {
    printf("Hello, World!\n");
    }
  2. Функция не принимает параметров:

    int getRandomNumber(void) {
    return 4;  // выбрано fair dice roll. guaranteed to be random.
    }
  3. Общие указатели (мы рассмотрим это в разделе указателей)

Тип данных массивов в C

Массивы resemble a line of pigeonholes, each holding a value of the same type:

#include <stdio.h>

int main() {
int scores[5] = {85, 92, 78, 90, 88};

printf("First score: %d\n", scores[0]);
printf("Last score: %d\n", scores[4]);

float average = 0;
for(int i = 0; i < 5; i++) {
average += scores[i];
}
average /= 5;

printf("Average score: %.2f\n", average);

return 0;
}

Результат:

First score: 85
Last score: 88
Average score: 86.60

Помните, что в C индексы массивов начинаются с 0. Это как этажи в Европе - первый этаж - это 0!

Тип данных указателей в C

Указатели resemble signposts that point to locations in memory. Они мощные, но могут быть сложными:

#include <stdio.h>

int main() {
int x = 10;
int *p = &x;

printf("Value of x: %d\n", x);
printf("Address of x: %p\n", (void*)&x);
printf("Value of p: %p\n", (void*)p);
printf("Value pointed by p: %d\n", *p);

*p = 20;
printf("New value of x: %d\n", x);

return 0;
}

Результат (адреса будут варьироваться):

Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20

Здесь p - это указатель, который хранит адрес x. Мы можем использовать *p, чтобы получить или изменить значение по этому адресу. Это как иметь пульт управления для x!

И вот и все! Мы рассмотрели основные типы данных в C. Помните, что понимание типов данных важно,因为它 помогает вам эффективно управлять памятью и избегать ошибок. Продолжайте практиковаться, и скоро вы будете жонглировать этими типами, как профи! Счастливого кодирования!

Credits: Image by storyset