c-如何更改或修改常量变量的值


#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进行编译。预处理器在编译前正在处理代码。

如果您想(例如(为多个操作系统创建程序,这将非常有用。

最新更新