У цьому уроці ми розглянемо основи мови C та поступово перейдемо до вивчення pointer'ів (покажчиків) у наступному уроці. Це стане основою для глибшого занурення в системне програмування.
Struct
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 у main, можна зробити це так:
struct ogrenci{
int ogrNo;
double not;
} ogr1, ogr2, ogr3;
typedef
Для зручності читання використовують typedef. Якщо ви не хочете кожного разу писати повне оголошення struct, typedef дозволяє створити коротшу назву для типу.
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
У цьому прикладі ми маємо два цілих числа та один тип double. Якщо ми поділимо два цілих числа, результат буде цілим, навіть якщо результат зберігається в змінній типу 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
Якщо ви не хочете ініціалізувати масив на початку, як у випадку з {'A', 'D', 'E', 'M'}
, то ви повинні вказати розмір масиву.
int dizi[] ❌ int dizi[] = {1, 2, 3, 4} ✅
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
Оголошення простих функцій:
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
int main(){
int t;
t = topla(10, 7);
printf("Toplam: %d\n", t);
return 0;
}
int topla(int a, int b){
return a + b;
}
Це дасть помилку, тому що функцію потрібно спочатку декларувати перед її використанням в 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;
}
Тепер код працює правильно. Якщо ми хочемо використовувати функцію після main, її потрібно спочатку декларувати.
Якщо ми хочемо, щоб функція повертала не тільки суму двох чисел, але й їх різницю, це не можливо в рамках однієї функції. Однак, ми можемо застосувати інший підхід:
🧠 Використовувати pointer'и!
Один із найпоширеніших способів використання pointer'ів — це повернення кількох значень з функції. В наступному уроці ми розглянемо, як працювати з pointer'ами (покажчиками).
Перекладено з: Sistem Programlama Basic Ders Serisi — 02