Функция aaa
ожидает указатель на указатель на постоянная междунар. Ваша переменная a
является указателем на указатель на int. Это ошибка, чтобы назначить последнюю первой.
как int const *a[]
, так и const int *a[]
на самом деле то же самое, что соответствует подписи aaa
. Если вы попробовали int * const a[]
, это был бы другой тип (указатель-константа-указатель-на-int), и вы снова вызывали ошибку типа.
Если вы хотите, чтобы ваша функция aaa
взять постоянный-указатель на указатель на междунар, вам нужно написать aaa(int ** const a)
, но имея константный-Несс на значения параметров не имеет фактически никакого влияния на то, что вы можете позвонить с ,
Edit:«Но не константность добавил неявно - сделано с неявной броском (который является собственно вопрос)?»
константность может быть неявно добавляется к значению вы прохождение, например
void aaa(const int a) {}
int b=5;
aaa(b);
... или один указатель уровня
void aaa(const int* a) {}
int *b=new int;
aaa(b);
... но не могут быть добавлены глубже. Например, это недопустимо:
void aaa(const int** a) {}
int* b=new int;
int** c=&b;
aaa(c);
Я думаю, что Джеймс Канзе объясняет это гораздо лучше в своем ответе.
возможно 'ааа (& годовых)' должен быть ' aaa (pa) ' – bitstore
@tinybit или его объявление должно быть' int * pa; ', а использование после вызова должно быть' * pa = 0; '. Я отредактирую, чтобы исправить код в моем ответе. Спасибо, что заметили это. –