C - Различные операторы: friendly гид для начинающих

Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие по миру различных операторов языка C. Не волнуйтесь, если вы новички в программировании - я буду вашим friendly гидом, объясняя все шаг за шагом. Итак, погружаемся!

C - Misc Operators

Оператор sizeof в C

Представьте, что вы пакуете вещи для поездки и хотите узнать, сколько места занимает каждая из них. Именно это делает оператор sizeof в C - он告诉我们, сколько места занимают вещи в нашей программе!

Оператор sizeof возвращает размер (в байтах) своего операнда. Вот как вы можете использовать его:

#include <stdio.h>

int main() {
int number = 42;
char letter = 'A';

printf("Размер int: %zu байтов\n", sizeof(int));
printf("Размер char: %zu байтов\n", sizeof(char));
printf("Размер переменной number: %zu байтов\n", sizeof(number));
printf("Размер переменной letter: %zu байтов\n", sizeof(letter));

return 0;
}

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

Размер int: 4 байта
Размер char: 1 байт
Размер переменной number: 4 байта
Размер переменной letter: 1 байт

Как видите, sizeof можно использовать как с типами данных, так и с переменными. Это super полезно, когда вам нужно знать exactly, сколько памяти использует ваши данные!

Оператор адреса в C

Теперь давайте поговорим об операторе адреса,中表示аемом символом &. Представьте себе, что компьютерная память - это большое многоквартирное здание. Каждая квартира (место в памяти) имеет свой адрес. Оператор & помогает нам найти эти адреса!

Вот простой пример:

#include <stdio.h>

int main() {
int age = 25;
printf("Значение age: %d\n", age);
printf("Адрес age: %p\n", (void*)&age);

return 0;
}

Это выведет что-то вроде:

Значение age: 25
Адрес age: 0x7ffd5e7e9994

Точный адрес будет مختلفим на вашем компьютере, но вы понимаете идею!

Оператор dereference в C

Если оператор адреса (&) помогает найти, где что-то находится, то оператор dereference (*) позволяет посетить этот адрес и увидеть, что там. Это как сказать: "У меня есть этот адрес, что внутри?"

Давайте посмотрим на это в действии:

#include <stdio.h>

int main() {
int cookies = 5;
int *p_cookies = &cookies;

printf("Значение cookies: %d\n", cookies);
printf("Адрес cookies: %p\n", (void*)&cookies);
printf("Значение p_cookies: %p\n", (void*)p_cookies);
printf("Значение по адресу *p_cookies: %d\n", *p_cookies);

return 0;
}

Результат:

Значение cookies: 5
Адрес cookies: 0x7ffd5e7e9994
Значение p_cookies: 0x7ffd5e7e9994
Значение по адресу *p_cookies: 5

Смотрите, как *p_cookies дает нам значение, хранящееся по адресу, на который указывает p_cookies? Это и есть dereference!

Оператор ternary в C

Оператор ternary - это как укороченная версия if-else语句. Он идеально подходит для случаев, когда вы хотите присвоить значение на основе условия. Вот синтаксис:

condition ? value_if_true : value_if_false

Давайте посмотрим на пример:

#include <stdio.h>

int main() {
int age = 20;
char *status = (age >= 18) ? "взрослый" : "未成年";

printf("В %d лет вы являетесь %s.\n", age, status);

return 0;
}

Результат:

В 20 лет вы являетесь взрослым.

Не правда ли, это здорово? Это как задать вопрос и получить один из двух возможных ответов!

Оператор точки (.) в C

Оператор точки используется для доступа к членам структуры. Представьте структуру как контейнер, который может содержать несколько элементов разных типов.

Вот пример:

#include <stdio.h>

struct Person {
char name[50];
int age;
};

int main() {
struct Person john = {"John Doe", 30};

printf("Имя: %s\n", john.name);
printf("Возраст: %d\n", john.age);

return 0;
}

Результат:

Имя: John Doe
Возраст: 30

Мы используем оператор точки для доступа к name и age из нашей структуры Person.

Оператор indirection в C

Оператор indirection на самом деле такой же, как и оператор dereference (*), о котором мы говорили раньшe. Он называется "indirection" потому что позволяет нам косвенно доступ к значению через указатель.

Вот немного более сложный пример:

#include <stdio.h>

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

printf("Значение x: %d\n", x);
printf("Значение *p: %d\n", *p);
printf("Значение **pp: %d\n", **pp);

return 0;
}

Результат:

Значение x: 10
Значение *p: 10
Значение **pp: 10

Здесь мы используем несколько уровней косвенности. pp - это указатель на указатель!

И вот мы и все! Мы рассмотрели все различные операторы в C. Помните, что практика makes perfect, так что не бойтесь экспериментировать с этими операторами в вашем собственном коде. Счастливого кодирования!

Credits: Image by storyset