C - Различные операторы: friendly гид для начинающих
Здравствуйте, будущие программисты! Сегодня мы отправимся в увлекательное путешествие по миру различных операторов языка C. Не волнуйтесь, если вы новички в программировании - я буду вашим friendly гидом, объясняя все шаг за шагом. Итак, погружаемся!
Оператор 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