我们知道在int * const p中,p是一个常量指针 它意味着p保持的地址不能改变,但是在函数foo中我们改变地址。
怎么可能?
int main(){
int i = 10;
int *p = &i;
foo(&p);
printf("%d ", *p);
printf("%d ", *p);
}
void foo(int **const p){
int j = 11;
*p = &j;
printf("%d ", **p);
}
答案 0 :(得分:2)
int **const p
表示p
不变。
不允许关注
p++; // Bad
p += 10; // Bad
p = newp; // Bad
但以下情况很好:
if(p) *p = some_p;
if(p && *p) **p = some_int;
如果您不想重新分配*p
,请使用以下
int * const *p;
如果您不希望p
或*p
变更,请使用:
int * const * const p;
以下内容将使所有p
,*p
和**p
成为只读
const int *const *const p;
// 1 2 3
1:**p
是恒定的
2:*p
是恒定的
3:p
是常数
根据您的要求使用1或2或3或任意组合。
cdecl页面:如何阅读int ** const p
和const int *const *const p
等复杂声明
答案 1 :(得分:0)