2015-07-24 3 views
0

Интересно, позволяет ли C/C++ использовать «const int **» в вызове функции?Есть ли механизм для постоянного указателя на указатель в C?

Предположим, у меня есть матрица, к которой можно обратиться указателем на указатель. Когда я хочу использовать эту матрицу и запретить модификацию любого значения в этой матрице, могу ли я сделать «func (const int ** mat)»? Я пробовал это, но когда я делаю что-то вроде этого «a = mat [0] [0]», появляется сообщение об ошибке.

Интересно, разрешено ли использовать «const int **» или что это правильный способ сделать это?

Спасибо!

+1

Какое сообщение об ошибке? –

+1

См. Http://stackoverflow.com/a/1143272/4107809 – mattm

+1

Возможный дубликат [В чем разница между const int \ *, const int \ * const и int const \ *?] (Http: // stackoverflow. com/questions/1143262/what-is-the-difference-between-const-int-const-int-const-and-int-const) – mattm

ответ

1

const модификатор связывается с токеном слева от него. Если он размещен все слева, он перемещается на одно место вправо. Поэтому, когда вы пишете const int **, это означает int const **: целое число, указанное в конце, равно константе, но можно манипулировать указателем. Это, вероятно, точно что вы хотите.

Так что, если вы получаете сообщение об ошибке, это, вероятно, потому, что ваш a не относится к int const (или - const int), а просто int.

+0

Но вы хотите добиться того, что 'mat [0] [0]' является постоянным, но ему может присваиваться 'a'. Таким образом, назначение const для int является точным, но присваивание int константе помечено, –