为什么说C语言中常量不能改变?可以改变啊,比如我写代码的时候,本来写的7,现在改成5,这不就改了吗!
发布网友
发布时间:2022-04-23 13:34
我来回答
共5个回答
热心网友
时间:2023-10-15 21:55
首先,概念我就不再多说了了,首先从他们定义上去区别,定义一个变量,我们只需要“int a;”这样就够了,如果你要定义一个常量“const int a;”这样很明显是错误的,必须要给它赋值,要“const int a=1;”对吧。
接着,之所以说常量不可变,接着 我们来看一段代码,判断一下哪句话会引起报错呢: typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 答案与分析: 问题出在 p2++上。 1)、const 使用的基本形式: const char m; 限定 m 不可变。 2)、替换 1 式中的 m, const char *pm; 限定*pm 不可变,当然 pm 是可变的,因此问题中 p1++ 是对的。 3)、替换 1 式 char, const newType m; 限定 m 不可变,问题中的 charptr 就是一种新类型,因此 问题中 p2 不可变,p2++是错误的。
再比如 下面定义了一个指向字符串常量的指针: const * ptr2 = stringprt1; 其中,ptr2 是一个指向字符串常量的指针。ptr2 所指向的字符串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。
热心网友
时间:2023-10-15 21:56
常量不可改变是指在第一次赋值之后,在程序运行当中不可改变,你应该是理解错了!追问从理论上说常量和变量都是“一段储存空间”,为什么常量运行中不可改变,而变量可以?
追答这是C++的实现问题。
个人觉得应该是将内存标记为只读了。
热心网友
时间:2023-10-15 21:56
int val = 5; //这是变量
val = 7; //你修改了变量的值
const int val = 5; //这是常量
val = 7; //报错,不能修改常量的值。
热心网友
时间:2023-10-15 21:57
书上说的能不能改是指运行过程中。你写程序的时候程序并没有在“运行”,写完以后编译了才运行,开始运行了就不能改了,运行完了你爱改那是另一回事……
热心网友
时间:2023-10-15 21:57
简单一句话:地址值与内容的关系不可改变,这里再解释一下:任何一个量在内存空间中的样子都类似于一个有俩个格子的纸箱子,一边存放地址值一边存放数值,在变量中这种关系可以被改变,常量则不可以。
认可我吧,因为剩下的回答都是狗屎
热心网友
时间:2023-10-15 21:55
首先,概念我就不再多说了了,首先从他们定义上去区别,定义一个变量,我们只需要“int a;”这样就够了,如果你要定义一个常量“const int a;”这样很明显是错误的,必须要给它赋值,要“const int a=1;”对吧。
接着,之所以说常量不可变,接着 我们来看一段代码,判断一下哪句话会引起报错呢: typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 答案与分析: 问题出在 p2++上。 1)、const 使用的基本形式: const char m; 限定 m 不可变。 2)、替换 1 式中的 m, const char *pm; 限定*pm 不可变,当然 pm 是可变的,因此问题中 p1++ 是对的。 3)、替换 1 式 char, const newType m; 限定 m 不可变,问题中的 charptr 就是一种新类型,因此 问题中 p2 不可变,p2++是错误的。
再比如 下面定义了一个指向字符串常量的指针: const * ptr2 = stringprt1; 其中,ptr2 是一个指向字符串常量的指针。ptr2 所指向的字符串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。
热心网友
时间:2023-10-15 21:56
常量不可改变是指在第一次赋值之后,在程序运行当中不可改变,你应该是理解错了!追问从理论上说常量和变量都是“一段储存空间”,为什么常量运行中不可改变,而变量可以?
追答这是C++的实现问题。
个人觉得应该是将内存标记为只读了。
热心网友
时间:2023-10-15 21:56
int val = 5; //这是变量
val = 7; //你修改了变量的值
const int val = 5; //这是常量
val = 7; //报错,不能修改常量的值。
热心网友
时间:2023-10-15 21:57
书上说的能不能改是指运行过程中。你写程序的时候程序并没有在“运行”,写完以后编译了才运行,开始运行了就不能改了,运行完了你爱改那是另一回事……
热心网友
时间:2023-10-15 21:57
简单一句话:地址值与内容的关系不可改变,这里再解释一下:任何一个量在内存空间中的样子都类似于一个有俩个格子的纸箱子,一边存放地址值一边存放数值,在变量中这种关系可以被改变,常量则不可以。
认可我吧,因为剩下的回答都是狗屎