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. Консольне введення-виведення

C покажчики. Константи і покажчики


Окремо варто сказати про покажчики на константи і константні покажчики.

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

#include <stdio.h>
 
int main(void)
{
    const int a = 10;
    const int *pa = &a;
    printf("address=%p \t value=%d \n", pa, *pa);
     
    return 0;
}

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

*pa = 34;

В цьому випадку ми просто отримаємо помилку під час компіляції.

Можлива також ситуація, коли покажчик на константу насправді вказує на змінну:

#include <stdio.h>
 
int main(void)
{
    int a = 10;
    const int *pa = &a;
    printf("value=%d \n", *pa);     // 10
    a = 22;
    printf("value=%d \n", *pa);     // 22
    //*pa = 34;     // так делать нельзя
     
    return 0;
}

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

Через покажчик на константу ми не можемо змінювати значення змінної / константи. Але ми можемо привласнити покажчику адресу будь-якої іншої змінної або константи:

int a = 10;
const int *pa = &a;     // указатель указывает на переменную a
const int b = 45;
pa = &b;                // указатель указывает на константу b

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

int a = 10;
int *const pa = &a;
printf("value=%d \n", *pa);     // 10
*pa = 22;                       // меняем значение
printf("value=%d \n", *pa);     // 22
 
int b = 45;
// pa = &b;         так нельзя сделать

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

int a = 10;
const int *const pa = &a;
 
//*pa = 22;  так сделать нельзя
 
int b = 45;
// pa = &b;  так сделать нельзя 

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