#include<stdio.h>
void main() {
const int convalue=64;
int *point;
point = &convalue;
(*point)++;
printf("address of point is %p address of convalue is %pn",point,&convalue);
printf("convalue is %d and point is %dn",convalue,*point);
}
如何修改常变量值
如何修改常变量值
初始化后,不能更改常量1的值。这就是";常数";方法
您可以通过删除const限定符来更改程序。然后您可以更改该值。或者,您可以在初始化期间有条件地选择另一个值。
1除非常量是类类型,否则您可以更改对象的可变成员。
void main()
pogram格式错误。main
必须在C++中返回int
。它可能不会返回void
。
point = &convalue;
pogram格式错误。指向常量的指针不会隐式转换为指向非常量的指针。语言的类型系统保护你不犯这样的错误。
(*point)++;
程序的行为未定义。不得修改Const对象。这是一个bug。不要在程序中写这个。
我们不能也不应该试图修改const
变量的值。此外,
任何修改常量对象的尝试都会导致未定义的行为。
此外,
请注意,未定义的行为意味着任何事情都可能发生,包括但不限于成功编译程序并提供预期输出。但是不依赖具有未定义行为的程序的输出。
有关未定义行为的更多阅读,您可以参考未定义行为文档,其中提到:
程序的行为没有任何限制。
错误2
您的程序(在C++中(中还有另一个错误(除了未定义的行为(。特别是,你应该更换
int *point;//INCORRECT
带有
const int *point;//CORRECT, note i have added const here
错误3
你应该用代替void main()
int main()
因为void main()
不是标准C++,正如Bjarne Stroustrup在本文中明确指出的那样
定义void main((不是,也从来不是C++,甚至不是C。
简单地说,你做不到"常数";是恒定的
如果需要,则必须使用变量。
无论如何,有一种可能性可以得到你想要的东西——预处理器。这个问题有点奇怪,所以我想你可以对此感到满意。
使用预处理器可以确定const的初始值。(还有更多,但事实并非如此。(在初始化后,你仍然不能修改它,但也许它对你来说已经足够了。例如:
#include<stdio.h>
void main() {
const int convalue=
#ifdef CLI_PROVIDED
CLI_PROVIDED;
#undef CLI_PROVIDED
#else
64;
#endif
int *point;
point = &convalue;
(*point)++;
printf("address of point is %p address of convalue is %pn",point,&convalue);
printf("convalue is %d and point is %dn",convalue,*point);
}
正常编译将使用值64初始化const。使用选项g++ -DCLI_PROVIDED=123
进行编译将在编译之前修改const的初始值(这只是文本操作(,然后使用值123进行编译。预处理器在编译前正在处理代码。
如果您想(例如(为多个操作系统创建程序,这将非常有用。