Это:
const int *data;
- указатель на константу целое число.Это означает, что вам не разрешено изменять данные, на которые указывает data
.Вы можете читать и копировать данные, но не можете:
(*data) = 5;
Это недопустимо в C ++, поскольку было объявлено const int *
.
Если вы берете адрес1013 *, вы получите const int **
, который является указателем на указатель на константу целое число.Таким образом, вы все еще не можете изменить целое число.Любая попытка сделать это приведет к жалобе компилятора.
Если вы хотите изменить целое число, то foo
и f1
не должны принимать значения const int *
.Они должны принимать значения int *
.
Я не хочу изменять константу.Я хочу изменить указатель на него (p в foo ())
Итак, вы получили указатель.И вы хотите увеличить указатель .Так что просто сделайте так:
void foo(const int *data) {
const int *p = data;
data++;
}
Вы увеличили указатель.Это не повлияет на вызывающего абонента до foo
, так как сам указатель копируется по значению.