У чым розніца паміж inst const * p і const int * p?


адказ 1:

Прывітанне

Пытанне змяшчае дзве рэчы: канстанта і паказальнік. Цяпер мы ўсе ведаем, што калі пераменная аб'яўляецца канстантай, мы не можам змяніць яе значэнне. Указальнік - гэта пераменная, якая захоўвае адрас іншай зменнай.

Таксама ёсць два аператары, якія мы знаходзім у паказальніках & і *. & выкарыстоўваецца для прызначэння адрасу зменнай паказальніку, а * выкарыстоўваецца для абазначэння значэння пазіцыі, на якую паказальнік паказвае.

Зараз мы падыходзім да пытання

const int * p - паказальнік на пастаянную зменную, і паколькі мы ўсе ведаем, што не можам змяніць значэнне канстанты, наступная аперацыя з'яўляецца несапраўднай і выклікае памылку.

* р = 3; // Несапраўдным тут мы спрабуем змяніць пастаянную зменную.

Але p = & i; // VALID. Я магу быць любой пераменнай

Ёсць і іншы спосаб пазначэння паказальніка на канстанту, г.зн.

int const * p1; // паказальнік на пастаянную Int

ёсць яшчэ адзін тып дэкларацыі, які мы бачым, гэта значыць int * const p. Гэта вядома як пастаянны паказальнік. Гэта значыць, што адрас, на які ён указвае, не можа быць зменены, таму аперацыі падобныя

* р = 3; // лічыцца сапраўдным пры змене значэння зменнай.

АЛЕ р = & я; // лічыцца несапраўдным, таму што спрабуе змяніць значэнне канстанты.

Можна таксама аб'явіць пастаянным паказальнікам на канстанту. У гэтым выпадку ні значэнне паказальніка, ні значэнне асноўнага элемента дадзеных не могуць быць зменены. Сінтаксіс ёсць

const int * const p;

Вось спосаб запомніць сінтаксіс, г.зн. H. У КОНСТАНТНЫМ Указальніку "const" заўсёды вынікае *.

Каб даведацца больш пра гэты візіт, наведайце geeksforgeeks і знайдзіце кваліфікацыю Const у C. Існуе праграма, якая тлумачыць больш.

спадзяюся, што гэта здыме некаторыя сумневы.


адказ 2:

int const * p => p - пастаянны паказальнік на цэлую зменную, у якой адрас, указаны p, з'яўляецца пастаянным (немагчыма змяніць) і значэнне ў гэтым адрасе можа быць зменена

const int * p => p - паказальнік на пастаянную цэлую зменную, дзе значэнне ў адрасе, пазначаным p, з'яўляецца пастаянным і адрас, пазначаны p, можа быць зменены


адказ 3:
Const і паказальнік: Важна адрозніваць паказальнік на канстанту і пастаянны паказальнік на зменную. Вось паказальнік на канстанту: const int * p; Наступнае сцвярджэнне з'яўляецца несапраўдным, паколькі робіцца спроба змяніць значэнне канстанты: * p = 3; Але гэта законна, бо сам паказальнік не з'яўляецца пастаяннай: p = & x; З іншага боку, гэтая дэкларацыя паказвае пастаянны паказальнік на зменную. int * const p; У гэтым выпадку дазволена наступнае выказванне, таму што зменную можна змяніць: * p = 3; Аднак гэта не так, бо робіцца спроба змяніць значэнне канстанты. р =? Можна аб'яўляць пастаянным паказальнікам на канстанту. У гэтым выпадку ні значэнне паказальніка, ні значэнне асноўнага элемента дадзеных не могуць быць зменены: const int * const p; Вось адзін з спосабаў запомніць сінтаксіс (ад Bjarne Stroustrup): Звярніце ўвагу, што ў паказальніках const "const" заўсёды вынікае "*". Напрыклад: int * const p1 = q; // пастаянны паказальнік на зменную int const * p2 = q; // паказальнік на канстанту int const int * p3 = q; // Указальнік на пастаянны Int Другі спосаб - думаць пра "*" як захоп найбуйнейшага блока спасылак, які ён можа. "Const" захоплівае найменшую адзінку, левую ці правую, што можа. Такім чынам, падумайце пра прыклады вышэй: (int *) const p1 = q; // пастаянны паказальнік на зменную int (int const) * p2 = q; // паказальнік на канстанту int (const int) * p3 = q; // паказальнік на канстанту int Іншымі словамі, класіфікатар непасрэдна перад зменнай з'яўляецца першым словам вызначэння.

адказ 4:
Const і паказальнік: Важна адрозніваць паказальнік на канстанту і пастаянны паказальнік на зменную. Вось паказальнік на канстанту: const int * p; Наступнае сцвярджэнне з'яўляецца несапраўдным, паколькі робіцца спроба змяніць значэнне канстанты: * p = 3; Але гэта законна, бо сам паказальнік не з'яўляецца пастаяннай: p = & x; З іншага боку, гэтая дэкларацыя паказвае пастаянны паказальнік на зменную. int * const p; У гэтым выпадку дазволена наступнае выказванне, таму што зменную можна змяніць: * p = 3; Аднак гэта не так, бо робіцца спроба змяніць значэнне канстанты. р =? Можна аб'яўляць пастаянным паказальнікам на канстанту. У гэтым выпадку ні значэнне паказальніка, ні значэнне асноўнага элемента дадзеных не могуць быць зменены: const int * const p; Вось адзін з спосабаў запомніць сінтаксіс (ад Bjarne Stroustrup): Звярніце ўвагу, што ў паказальніках const "const" заўсёды вынікае "*". Напрыклад: int * const p1 = q; // пастаянны паказальнік на зменную int const * p2 = q; // паказальнік на канстанту int const int * p3 = q; // Указальнік на пастаянны Int Другі спосаб - думаць пра "*" як захоп найбуйнейшага блока спасылак, які ён можа. "Const" захоплівае найменшую адзінку, левую ці правую, што можа. Такім чынам, падумайце пра прыклады вышэй: (int *) const p1 = q; // пастаянны паказальнік на зменную int (int const) * p2 = q; // паказальнік на канстанту int (const int) * p3 = q; // паказальнік на канстанту int Іншымі словамі, класіфікатар непасрэдна перад зменнай з'яўляецца першым словам вызначэння.

адказ 5:
Const і паказальнік: Важна адрозніваць паказальнік на канстанту і пастаянны паказальнік на зменную. Вось паказальнік на канстанту: const int * p; Наступнае сцвярджэнне з'яўляецца несапраўдным, паколькі робіцца спроба змяніць значэнне канстанты: * p = 3; Але гэта законна, бо сам паказальнік не з'яўляецца пастаяннай: p = & x; З іншага боку, гэтая дэкларацыя паказвае пастаянны паказальнік на зменную. int * const p; У гэтым выпадку дазволена наступнае выказванне, таму што зменную можна змяніць: * p = 3; Аднак гэта не так, бо робіцца спроба змяніць значэнне канстанты. р =? Можна аб'яўляць пастаянным паказальнікам на канстанту. У гэтым выпадку ні значэнне паказальніка, ні значэнне асноўнага элемента дадзеных не могуць быць зменены: const int * const p; Вось адзін з спосабаў запомніць сінтаксіс (ад Bjarne Stroustrup): Звярніце ўвагу, што ў паказальніках const "const" заўсёды вынікае "*". Напрыклад: int * const p1 = q; // пастаянны паказальнік на зменную int const * p2 = q; // паказальнік на канстанту int const int * p3 = q; // Указальнік на пастаянны Int Другі спосаб - думаць пра "*" як захоп найбуйнейшага блока спасылак, які ён можа. "Const" захоплівае найменшую адзінку, левую ці правую, што можа. Такім чынам, падумайце пра прыклады вышэй: (int *) const p1 = q; // пастаянны паказальнік на зменную int (int const) * p2 = q; // паказальнік на канстанту int (const int) * p3 = q; // паказальнік на канстанту int Іншымі словамі, класіфікатар непасрэдна перад зменнай з'яўляецца першым словам вызначэння.