Типы данных в C
Здравствуйте, будущие программисты! Добро пожаловать в наше захватывающее путешествие в мир программирования на языке C. Сегодня мы отправимся в fascinierende царство типов данных в C. Не волнуйтесь, если вы новички в программировании; я буду вашим дружелюбным проводником, и мы будем разбираться с этой темой шаг за шагом. Так что возьмите любимый напиток, устройтесь поудобнее и погружайтесь с нами!
Целочисленные типы данных в 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. Это как чистый холст - он представляет собой отсутствие данных. Мы в основном используем его в трех сценариях:
-
Функция не возвращает ничего:
void sayHello() { printf("Hello, World!\n"); }
-
Функция не принимает параметров:
int getRandomNumber(void) { return 4; // выбрано fair dice roll. guaranteed to be random. }
-
Общие указатели (мы рассмотрим это в разделе указателей)
Тип данных массивов в 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