2015-10-11 2 views
0

Скажут, у меня есть массив указателей на целые числа (т.е. каждый элемент представляет собой указатель на INT)Const отборочных в C++ в массиве указателей

int** ptrArray; 

и я хочу, чтобы предотвратить изменения в целых указываемых записях от массива

где мне нужно поставить const?

1. const int ** ptrArray 
2. int const ** ptrArray 
3. int *const* ptrArray 
4. int ** const ptrArray 

есть ли какие-то правила для этого? как «первый const защищает данные», «второй const защищает указатель» и так далее?

Есть ли какая-либо логика позади местоположения const? любая связь между тем, где положить и что она защищает?

Это очень запутанная проблема для меня, и я действительно буду оценивать, может ли кто-нибудь дать мне руководство или ссылку на то, где я могу больше узнать о том, как и где использовать константу на основе того, что я хочу защитить (в случае Мне нужно использовать const в трехмерном массиве или около того)

+1

«У меня есть массив указателей на целые числа». На самом деле у вас есть указатель на указатель на «int». – juanchopanza

+2

Да, я это знаю. , но как это относится к вопросу? – Adam

+4

Это абсолютно важно для вашего понимания массивов и указателей (и языка в целом), который является ключевым компонентом вопроса и его ответов. Не отмахивайтесь. Если вы «знаете это», не ошибетесь в вопросе! –

ответ

5

есть какое-то правило для этого ? например «first const защищает данные», «второй const защищает указатель» и т. д.?

Да: const относится влево, если там ничего нет, то это относится и к праву.

Таким образом, это:

int const** ptrArray; 

, но, как частный случай, это эквивалентно:

const int** ptrArray; 

Это означает, что общий шаблон const int x;является фактическиint const x; в маскировке.

3

Вы читаете модификаторы, начинающиеся с переменной.

например.

3. int *const* ptrArray 
  • ptrArray является переменной.
  • *ptrArray обозначает указатель на что-то
  • const* ptrArray обозначает указатель на то, что является постоянным
  • *const* ptrArray обозначает указатель на константный указатель на что-то

Так int *const* ptrArray; объявляет указатель на константный указатель на а (непостоянная) int


Конечный technicalit вам нужно знать, чтобы понять все примеры: int const и const int - два разных способа обозначить один и тот же тип.

1

http://cdecl.org отчетов (более или менее, один были недопустимая ошибка синтаксиса):

const int ** ptrArray: declare ptrArray as pointer to pointer to const int 
int const ** ptrArray: declare ptrArray as pointer to pointer to const int 
int * const * ptrArray: declare ptrArray as pointer to const pointer to int 
int ** const ptrArray: declare ptrArray as const pointer to pointer to int 

Так вы ищете для любого из:

const int ** ptrArray 
int const ** ptrArray 
Смежные вопросы