说我有以下代码
int const *p = new int(5);
printf("%d",(*p)++);
现在它说
error C3892: 'p' : you cannot assign to a variable that is const
为什么我收到此错误?我知道p是一个常数但是我只是试图打印(* p)++,它不会增加p指向的地址中的内容。谁能向我解释实际发生了什么?
答案 0 :(得分:5)
操作(*p)++
在语法上等同于(*p) += 1
。也就是说,它尝试对原始变量进行赋值。编译器抱怨,因为您不允许修改const
变量。
在这种情况下,您已声明p
是指向const
的指针,而不是const
指针。
相反,请尝试printf("%d", (*p)+1);
或者,您可以将p
声明为const
指针:int * const p
,但这会增加p
指向的值。
答案 1 :(得分:3)
以这种方式改变:
int* const p = new int(5);
这意味着指针是常量。
int const *p = new int(5);
这意味着指针指向的是常量。
如果你是第一种方式,那么你可以通过指针增加你指向的值。
(* p)++取消引用指针并递增值。所以你应该是我发布的第一种方式。