C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

С масиви і рядки


Масив являє набір однотипних значень. Оголошення масиву виглядає наступним чином:

тип_змінної назва_масиву [довжина_масива]

Після типу змінної йде назва масиву, а потім в квадратних дужках його розмір. Наприклад, визначимо масив з 4 чисел:

int numbers[4];

Використовуючи номери елементів масиві, які називаються індексами, ми можемо звернутися до окремих елементів. наприклад:

#include <stdio.h>
int main(void)
{
    int numbers[4];     // оголошення масиву
    numbers[0] = 1;     // присвоєння значень масиву (ініціалізація)
    numbers[1] = 2;
    numbers[2] = 3;
    numbers[3] = 4;
     
    printf("numbers[2] = %d", numbers[2]);  // 3
    return 0;
}

Індекси починаються з нуля, тому для звернення до першого елементу необхідно вжити вираз numbers[0] .

Також ми можемо відразу оголосити і заповнити масив значеннями. Для цього змінній масиву присвоюється набір значень через кому в фігурних дужках:

int numbers[4] = { 1, 2, 3, 5 };        // ініціалізований масив
printf("numbers[2] = %d", numbers[2]);  // 3

При ініціалізації масиву можна явно не вказувати його довжину, в цьому випадку довжина масиву буде обчислюватися виходячи з кількості його елементів:

int numbers[] = { 1, 2, 3, 5 };   // ініціалізований (заповнений даними) масив

Використовуючи циклічні конструкції, можна перебрати масив:

#include <stdio.h>
 
int main(void)
{
    int numbers[5] = { 10, 12, 13, 54, 43 };

    for(int i = 0; i < 5; i++)
    {
        printf("numbers[%d] = %d \n", i, numbers[i]);
    }

    return 0;
}

// RESULT:
// numbers[0] = 10 
// numbers[1] = 12
// numbers[2] = 13
// numbers[3] = 54
// numbers[4] = 43

При цьому необов'язково заповнювати масив значеннями для всіх його елементів:

int numbers[5] = { 10, 12}; // 10, 12, 0, 0, 0

В даному випадку в рамках ініціалізації надаються значення для двох перших елементів, інші елементи за замовчуванням отримують значення 0 .


багатовимірні масиви

Масиви можуть бути багатовимірними. Елементи таких масивів самі в свою чергу є масивами, в яких також елементи можуть бути масивами. Наприклад, визначимо двомірний масив чисел:

int numbers[3][2] = { {1, 2}, {4, 5}, {7, 8} };

Тут масив numbers має три елементи, але кожен з цих елементів сам представляє масив з двох елементів. Такий масив ще можна представити у вигляді таблиці:

1 2
4 5
7 8

І щоб звернутися до елементів вкладеного масиву, потрібно два індекси:

int numbers[3][2] = { {1, 2}, {4, 5}, {7, 8} };
printf("numbers[1][0] = %d \n", numbers[1][0]);     // 4

Переберемо двомірний масив:

#include <stdio.h>
 
int main(void)
{
    int numbers[3][2] = { {1, 2}, {4, 5}, {7, 8} };
    for(int i =0; i < 3; i++)
    {
        for(int j =0; j<2; j++)
        {
            printf("numbers[%d][%d] = %d \n", i, j, numbers[i][j]);
        }
    }
    return 0;
}

рядки

Вище розглядалися масиви чисел, але з масивами інших типів даних все буде аналогічно. Але окремо варто зупинитися на масивах символів. У різних мовах програмування є спеціальні типи даних для подання рядків. У мові програмування Сі для подання рядків використовуються масиви символів, адже по суті рядок - це і є набір символів. Наприклад, визначимо рядок:

#include <stdio.h>
 
int main(void)
{
    char welcome[] = "Hello";               // масив символів
    printf("welcome = %s \n", welcome);     // Hello
    return 0;
}

Рядки визначаються в подвійних лапках. І якщо нам в програмі потрібні рядки, то як раз можна використовувати масиви символів.

Але варто відзначити, що крім самих символів, які вкладені в подвійні лапки, кожен рядок в якості завершального символу містить символ ' \0 ' або нульовий символ. Тому в рядку " Hello " насправді буде не 5 символів, а 6 . Наприклад, переберемо всі символи рядка і виведемо їх десятковий код ASCII :

char welcome[] = "Hello";
for(int i=0; i<6; i++)
{
    printf("%d ", welcome[i]);   // 72 101 108 108 111 0
}

На консолі при запуску програми ми зможемо побачити в кінці нульовий символ:

welcome[/tag_code] не як рядок, а саме як масив символів, то останнім елементом мав би йти нульовий символ:[/p]

[code]char welcome[] = {'H', 'e', 'l', 'l', 'o', '\0'};

Наш партнер:
beta test mp3 playlist downloader