为什么我不能用 const int 的地址初始化 int*

Why can't I initialize a int* with the address of a const int

本文关键字:int 地址 初始化 const 不能 为什么      更新时间:2023-10-16

这就是我所拥有的:

const int x = 10;
int *ptr = &x; //error: 'initializing': cannot convert from 'const int *' to 'int *'

我知道x在初始化后不能修改,我知道如何解决这个编译问题,但为什么我不能使用指针(在本例中为ptr)指向x

虽然它是const int,但我不明白为什么我不能指向它,因为我仍然可以用*ptr来表示x,对吧?

因为ptr的类型是int*,即它指向一个非常数int。这允许您使用*ptr修改ptr。为了防止const变量被修改,编译器会阻止对非常量指针的初始赋值。

使ptr指向const int自然会解决问题:const int* ptr = &x;