Ⅰ c语言问题,有两个问题,符号常量在整个程序中其值都不能再被重新定义这个为什么不对
常量就是右值, 它在内存中没有它的空间, 也就不能改变它的值, 或者可以这么说, 你就算改变了它也没有任何价值, 而且这样会对程序的一些地方的错误难以发现. 所以它是不能被改变的.
而符号常量和常量一样, 它是不能被改变的. 但是它是有作用域的, 超过这个作用域就没用了.
常量你可以理解成有作用域, 而它的作用域是整个程序.
Ⅱ C语言中为什么常量和表达式不能进行自增自减运算
首先说表达式,我们要知道自增和自减的原理,从表象上看自增自减对一个变量的值进行+1或-1操作。但是深入到底层的实现原理,这两个操作其实是对固定的内存地址内的值进行+1或-1。所以要能够自增自减首先就要满足有固定的内存地址,而对于表达式来说,最终表达式计算得到的结果如果不赋值给变量的话是没有固定内存地址记录这个值的。
再来说常量,虽然常量是有分配固定内存地址,但是常量的意义就是指‘不变化的量’,所以说这是类型限定了常量是不能被改变的,如果能变,那就不是常量了。
Ⅲ C语言中变量与常量的概念是什么
在C程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,直接常量是可以不经说明而直接引用的,而符号常量和变量则必须先定义后使用。
具体说明:
1、在程序执行过程中,其值不发生改变的量称为常量。
①直接常量
整型常量:12、0、-3;
实型常量:4.6、-1.23;
字符常量:‘a’、‘b’。
②符号常量
标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。
符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常量其中#define也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。
· 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
【例3.1】符号常量的使用。#define PRICE 30main(){ int num,total;num=10;total=num* PRICE;printf(“total=%d”,total);}
· 用标识符代表一个常量,称为符号常量。
· 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。
· 使用符号常量的好处是:
含义清楚;
能做到“一改全改”。
2、其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。
Ⅳ C语言整型常量转化问题
首先要明白c语言的常量表达什么?我们才能了解它的问题是什么:
常量:其值不会发生改变的量,称为常量。它们可以和数据类型接合起来分类。比如:整形常量,浮点型常量,字符常量等等,常量是可以不经过定义和初始化,而直接引用的。
常量分类:常量又分为:直接常量和符号常量。
直接常量又叫做:字面常量。如12,0,4.6,’a’,”abcd”
符号常量:如宏定义的:#define
pi
3.14
特点:常量的值在其作用域内不会发生改变,也不能再被赋值。其在出现时就被当作一个立即数来使用。也就是说,只能被访问,被读,而不能被写,被赋值。
常量所在的内存空间就被加上了只读的属性,它有点类似于const关键字,那么它常见的问题如下:
(1) 可以定义const常量,具有不可变性。
例如:
const
int
max=100;
int
array[max];
(2) 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如:
void
f(const
int
i)
{
.........}
//编译器就会知道i是一个常量,不允许修改;
(3) 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。
(4) 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如:
void
f(const
int
i)
{
i=10;//error!
}
(5) 为函数重载提供了一个参考。例如:
class
a
{
......
void
f(int
i)
{......}
//一个函数
void
f(int
i)
const
{......}
//上一个函数的重载
......
};
Ⅳ 以下选项中关于C语言常量的叙述错误的是
既然是变量,那就不是常量。如果是常量,当然也就不能改变。
当然还有一种是const修饰的变量,比如const int a = 1;a的值也不能变,但不能说a是常量
按照不同的分类:
①常量分为整型常量、实型常量、字符常量和字符串常量
②常量可分为数值型常量和非数值型常量
然后你可以综合的选下了,哈哈
Ⅵ 为什么说C语言中常量不能改变可以改变啊,比如我写代码的时候,本来写的7,现在改成5,这不就改了吗!
首先,概念我就不再多说了了,首先从他们定义上去区别,定义一个变量,我们只需要“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; 是合法的。