Програмування С, С++теорія та практика (частина 1)
1.17.2 Модифікатори сопзі і уоіаіііе
Про модифікатор соті йшла мова в розділі 1.2.3.”Константи”. Модифікатор соті не допускає явного присвоювання змінній або інших дій, що можуть вплинути на зміну її значення, таких як виконання операції інкременту і декременту. Значення покажчика, що оголошений з модифікатором соті, не може бути зміненим, на відміну від значення об’єкта, на який він вказує.
Модифікатори уоїаґіїе і соті протилежні за змістом.
Модифікатор уоїаґіїе вказує на те, що значення змінної може бути зміненим; але не тільки безпосередньо програмою, а також і зовнішнім впливом (наприклад, програмою обробки переривань, або, якщо змінна відповідає порту введення/виведення, обміном із зовнішнім пристроєм). Оголошення об’єкта з модифікатором уоїаґіїе попереджує компілятор мови Сі, чого не слід робити
Можливим також є одночасне використання в оголошенні модифікаторів соті і уоїаґіїе. Це означає, що значення змінної не може модифікуватися програмою, але піддається зовнішньому впливу.
Якщо з модифікатором соті або уоїаґіїе оголошується змінна складеного типу, то дія модифікатора розповсюджується на всі його складові елементи.
Примітка. При відсутності в оголошенні специфікації типу і присутності модифікатора соті або уоїаґіїе мається на увазі тип іпґ.
Приклади:
£1оа£ сопз'Ь рі=3.14159265 ; сопз'Ь тахіп'Ь=32767;
сЬаг *сопз£ з£г= "Деякий рядок."; /* покажчик-константа */ сЬаг сопз£ *з£г2= „Рядок";/* покажчик на константний рядок */
Із врахуванням наведених вище оголошень наступні оператори неприпустимими.
рі=3.0; /* присвоювання значення константі */
і=тахіп-Ь- - ; /* зменшення константи */
з-Ьг="0-ЬЬег з-Ьгіпд"; /* присвоювання значення константі -
покажчику */
Однак виклик функції §1гсру(8іг,”8ігіп£”); припустимий, так як в даному випадку здійснюється посимвольне копіювання рядка в область пам’яті, на яку вказує покажчик.
Аналогічно, якщо покажчик на тип соті присвоїти покажчику на тип, відмінний від соті, то через отриманий покажчик можна здійснювати присвоювання.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
