Оператор точки (.) у мові програмування C

Привіт, майбутні кодовані чародії! Сьогодні ми вирушаємо на захоплюючу подорож у світ програмування на мові C, конкретно розглядаючи магічний оператор точки (.). Не хвилюйтесь, якщо ви новачок у програмуванні; я буду вашим дружнім провідником, і ми розберемо цю тему крок за кроком. Тому, візьміть свої віртуальні палички (клавіатури) і давайте наведемо деякі заклинання на мові C!

C - Dot (.) Operator

Що таке оператор точки (.)?

Оператор точки (.) у мові C є як小小的 місток, що з'єднує різні частини вашого коду. Він використовується для доступу до членів (змінних або функцій) структур і об'єднань. Уявіть його як ключ, що відкриває різні відсіки у скарбничці вашого коду.

Проста аналогія

Уявіть, що у вас є рюкзак (це ваша структура) з різними кишенями (це ваші члени). Оператор точки - це як ваша рука, що дістаєте до певної кишені, щоб взяти те, що вам потрібно. Simply, чи не так?

Використання оператора точки (.)

Давайте розглянемо базовий приклад, щоб побачити, як працює оператор точки на практиці.

#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: %.2f\n", alice.gpa);

return 0;
}

У цьому прикладі ми створюємо структуру Student з трьома членами: name, age та gpa. Потім ми використовуємо оператор точки для доступу до цих членів і призначення їм значень. Пізніше ми використовуємо його знову для отримання та виводу цих значень.

Оператор точки з структурою (struct)

Структури - це як саморобні типи даних, що можуть містити різні типи даних. Оператор точки - ваш надійний інструмент для роботи з цими структурами.

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

struct Book {
char title[100];
char author[50];
int year;
};

int main() {
struct Book myFavoriteBook;

// Призначення значень за допомогою оператора точки
strcpy(myFavoriteBook.title, "The C Programming Language");
strcpy(myFavoriteBook.author, "Brian Kernighan and Dennis Ritchie");
myFavoriteBook.year = 1978;

// Вивід значень за допомогою оператора точки
printf("My favorite book:\n");
printf("Title: %s\n", myFavoriteBook.title);
printf("Author: %s\n", myFavoriteBook.author);
printf("Year: %d\n", myFavoriteBook.year);

return 0;
}

Тут ми використовуємо оператор точки для роботи зі структурою Book. Це як заповнення бібліотечної картки для вашої улюбленої книги!

Оператор точки з об'єднанням (union)

Об'єднання схожі на структури, але з twist - вони дозволяють зберігати різні типи даних у тій же пам'яті. Оператор точки працює з об'єднаннями так само, як і зі структурами.

#include <stdio.h>

union Data {
int i;
float f;
char str[20];
};

int main() {
union Data data;

data.i = 10;
printf("data.i: %d\n", data.i);

data.f = 220.5;
printf("data.f: %.2f\n", data.f);

strcpy(data.str, "C Programming");
printf("data.str: %s\n", data.str);

return 0;
}

У цьому прикладі ми використовуємо оператор точки для доступу до різних членів об'єднання. Пам'ятайте, що в об'єднанні одночасно може міститися лише одне значення!

Оператор точки з вкладеною структурою

Іноді нам потрібно створювати більш складні структури, вкладаючи одну структуру всередину іншої. Оператор точки допомагає нам орієнтуватися у цих вкладених структурах.

#include <stdio.h>

struct Date {
int day;
int month;
int year;
};

struct Employee {
char name[50];
struct Date birthdate;
float salary;
};

int main() {
struct Employee emp;

strcpy(emp.name, "John Doe");
emp.birthdate.day = 15;
emp.birthdate.month = 8;
emp.birthdate.year = 1990;
emp.salary = 50000.0;

printf("Employee Details:\n");
printf("Name: %s\n", emp.name);
printf("Birthdate: %d/%d/%d\n", emp.birthdate.day, emp.birthdate.month, emp.birthdate.year);
printf("Salary: $%.2f\n", emp.salary);

return 0;
}

Тут ми використовуємо оператор точки для доступу до членів вкладеної структури Date всередині структури Employee. Це як знаходження певної сторінки (вулиця) в главі (місто) книги (країна) в бібліотеці (студент)!

Доступ до членів за допомогою оператора стрілки

Тепер давайте познайомимося з близьким родичем оператора точки: оператором стрілки (->). Цей оператор використовується при роботі з вказівниками на структури.

#include <stdio.h>
#include <stdlib.h>

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

int main() {
struct Person *personPtr;
personPtr = (struct Person*) malloc(sizeof(struct Person));

// Використання оператора стрілки з вказівником
strcpy(personPtr->name, "Bob");
personPtr->age = 30;

printf("Person Details:\n");
printf("Name: %s\n", personPtr->name);
printf("Age: %d\n", personPtr->age);

free(personPtr);
return 0;
}

У цьому прикладі ми використовуємо оператор стрілки для доступу до членів структури через вказівник. Це як використання пульта (вказівника) для доступу до функцій вашого телевізора (структури)!

Доступ до елементів вкладеної внутрішньої структури

Давайте заглибимося ще глибше у вкладені структури і подивимося, як ми можемо доступатися до внутрішніх елементів.

#include <stdio.h>

struct Address {
char street[100];
char city[50];
char country[50];
};

struct Student {
char name[50];
int id;
struct Address addr;
};

int main() {
struct Student s1;

strcpy(s1.name, "Emma Watson");
s1.id = 12345;
strcpy(s1.addr.street, "123 Hogwarts Lane");
strcpy(s1.addr.city, "London");
strcpy(s1.addr.country, "UK");

printf("Student Details:\n");
printf("Name: %s\n", s1.name);
printf("ID: %d\n", s1.id);
printf("Address: %s, %s, %s\n", s1.addr.street, s1.addr.city, s1.addr.country);

return 0;
}

У цьому чарівному прикладі ми використовуємо оператор точки для доступу до внутрішніх елементів вкладеної структури. Це як знаходження певної сторінки (вулиця) в главі (місто) книги (країна) в бібліотеці (студент)!

І ось ви маєте його, юні кодери! Ми дослідили чудовий світ оператора точки в мові C. Пам'ятайте, що практика робить досконалим, тому не бійтеся експериментувати з цими концепціями. Відмінного кодування, і нехай точки будуть з вами!

Credits: Image by storyset