const int *p 无法改变值的问题
老师在这堂课上讲无法通过这样的方式进行值的改变,是为什么呢?
int i=30;
const int *p=i;
*p=50;//这里是不可以的,
i=50;//这里却是可以的,这是为什么呢?不是说*p所指向的值无法修改吗?
老师在这堂课上讲无法通过这样的方式进行值的改变,是为什么呢?
int i=30;
const int *p=i;
*p=50;//这里是不可以的,
i=50;//这里却是可以的,这是为什么呢?不是说*p所指向的值无法修改吗?
2015-07-09
你要理解变量类型的重要性。
p的类型是指向const int的指针,如果你解引用这个指针的话,得到的会是const int类型。p的类型决定了这样的性质,这性质与p到底指向谁是无关的。
所以即使p指向的是个非const的int对象,但如果你通过p来访问所指的内容的话,这内容还是会被当作const的。就是说你无法通过*p来修改它,所谓的“*p的值无法修改”就是这个意思。
当然 i 本身是普通的int,自然可以通过 i 来任意修改了。
故const int指针可以指向const int对象,也可以指向普通的int对象。虽然普通int可以被修改,但不修改它自然也没什么问题。可反之,普通int指针就只能指向普通的int对象。如果它能够指向const int的话,就意味着你可以通过这个指针来修改所指的const int的内容,这显然是不合理的。
举报