У цьому уроці ми розглядаємо основи мови програмування C. Поступово будемо переходити до глибшого розуміння, починаючи з роботи з pointer'ами (покажчиками), що є важливою частиною системного програмування.
Struct
Тип даних struct
дозволяє об’єднувати різні типи даних у одну структуру. Наприклад, якщо у нас є студент, ми можемо створити структуру, що міститиме його номер студентського квитка, оцінки, ім’я, прізвище та інші характеристики. Це дає можливість зберігати всі ці дані в одному об’єкті.
Примітка: Оголошення struct
зазвичай розміщується поза функцією main
.
#include
#include
struct ogrenci {
int ogrNo;
double not;
};
int main() {
struct ogrenci ogr1;
ogr1.ogrNo = 10;
ogr1.not = 10.25;
printf("No: %d, Not: %f", ogr1.ogrNo, ogr1.not);
return 0;
}
Можна також оголосити кілька об'єктів цього типу в одному рядку:
struct ogrenci {
int ogrNo;
double not;
} ogr1, ogr2, ogr3;
typedef
Використовуємо typedef
, щоб зробити код більш читабельним і уникнути постійного повторення оголошень типів. Це особливо корисно для довгих типів, таких як struct
.
typedef struct ogrenci {
int ogrNo;
double not;
} ogr;
int main() {
ogr ogr1, ogr2;
ogr1.ogrNo = 10;
}
Інший приклад з масивом:
#include
#include
typedef struct dd {
int a[10];
} dizi;
int main() {
dizi d1, d2;
for (int i = 0; i < 10; i++)
d1.a[i] = i;
d2 = d1;
for (int i = 0; i < 10; i++)
printf("%d %d\n", d1.a[i], d2.a[i]);
return 0;
}
Виведення:
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
Typecasting
Типи даних можуть бути змінені через приведення типів (typecasting). Це особливо корисно, коли потрібно обробити різні типи даних, наприклад, поділ цілих чисел з результатом у типі double
.
int main() {
int i = 10, j = 3;
double ort;
ort = i / j;
printf("Ort: %f\n", ort);
}
Результат:
Ort: 3.0000
Ми очікуємо результат 3.33, але отримуємо ціле число. Щоб отримати точний результат, потрібно привести одне з чисел до типу double
.
ort = (double)i / j;
Результат:
Ort: 3.3333 ✅
Інші приклади коду
Перетворення символу на ціле число:
char ch = 'a';
int b;
b = (int)ch;
printf("ch: %c, b: %d\n", ch, b);
Результат:
ch: a, b: 97 (ASCI код)
Доступ до елементів масиву символів:
char a[] = {'A', 'D', 'E', 'M'};
printf("a = %c", a[2]);
Результат:
a = E
Перебір масиву:
char a[] = {'A', 'D', 'E', 'M'};
for (int i = 0; i < 4; i++)
printf("%c ", a[i]);
Результат:
A D E M
Створення масивів у C
Якщо ви не хочете ініціалізувати масив на початку, то при оголошенні потрібно вказати розмір:
int dizi[5];
dizi[0] = 1;
dizi[1] = 2;
dizi[2] = 3;
dizi[3] = 4;
Масив символів можна перетворити на рядок:
char a[] = {'A', 'D', 'E', 'M'};
printf("%s\n", a);
Результат:
ADEM
Функції в C
Оголошення та використання функцій у C:
void yazdir() {
printf("Merhaba Dunya\n");
}
int main() {
yazdir();
return 0;
}
Результат:
Merhaba Dunya
Функція з параметром:
void yazdir(int a) {
printf("main'den gelen deger: %d\n", a);
}
int main() {
yazdir(10);
return 0;
}
Результат:
main'den gelen deger: 10
Функція для обчислення суми:
void topla(int a, int b) {
printf("Toplam: %d\n", a + b);
}
int main() {
topla(10, 7);
return 0;
}
Результат:
Toplam: 17
Функція з поверненням значення:
int topla(int a, int b) {
return a + b;
}
int main() {
printf("Toplam: %d\n", topla(10, 7));
return 0;
}
Альтернативний спосіб:
int t;
t = topla(10, 7);
printf("Toplam: %d\n", t);
Результат:
Toplam: 17
Оголошення функцій після main
Якщо функція оголошена після main
, спочатку потрібно її декларацію:
int topla(int, int);
int main() {
int t;
t = topla(10, 7);
printf("Toplam: %d\n", t);
return 0;
}
int topla(int a, int b) {
return a + b;
}
Тепер код працює без помилок. Якщо функція повинна повертати не тільки суму, а й різницю, це неможливо зробити в одній функції, але є рішення:
🧠 Використовувати pointer'и! Вони дозволяють повертати кілька значень із функції. Наступного разу ми розглянемо, як працювати з pointer'ами (покажчиками) (Event Listener).
Перекладено з: Impulse response of a given signal on Code Composer studio