c中的整型常量是什么?
what is a integer constant in c?
我是初学者,正在阅读 C primer plus。有一个地方我不能理解。
我知道在整个程序中不能更改常量,当我读到这个时:
Initializing a Variable:
...
int hogs = 21;
int cows = 32, goats =14;
int dogs, cats = 94;
...
The various integers(21, 32, 14, and 94) are integer constants. When you write a number without a decimal point and without an exponent, C recognizes it as an integer.
我对他说的整数常量和整数感到困惑。我想也许他说当你写这个“int hogs = 21;”时,你将 hogs 声明为一个常量。所以我自己编码来检查是否“int hogs = 21;”是否声明常量:
int main()
{
int words = 3020, lines = 350;
printf("there were %d words and %d lines\n", words, lines);
words = 2;
lines = 1;
printf("change %d and %d", words, lines);
return 0;
}
可以改!然后我上网查了下,我知道你应该写这个“const int hogs = 21;”声明一个常量。但是整数常量是什么?什么是“各种整数(21、32、14 和 94)是整数常量。当你写一个没有小数点和指数的数字时,C 将其识别为整数。”。它已经是一个整数,因为您编码了“int hogs =21;”。我想也许他说如果你不声明变量而直接使用一个数字,比如 10,编译器会将该数字识别为整数变量。而10就是他所说的'integer constant'。那么是这样吗?
声明int hogs = 21
是常量,作者的意思只是声明了一个整型变量'hogs',并用常量值21对其进行了初始化。
与“各种整数(21、32、14 和 94)是整数常量”语句类似 - 作者的意思是其他整数变量已分别用常量值 32、14 和 94 初始化。
你对const关键字的理解是完全正确的,const关键字用于声明一个常量整型变量——只能声明一次且值不会改变的变量。
21
是一个整数常量,值为 21
,类型为 int
.
20 + 1
是由整数常量20
和1
和运算符+
组成的表达式,是一个整数常量表达式,值为21
,类型为int
。 (21
本身也是一个 整数常量表达式 。)
int bogs;
声明(并可能定义)bogs
为类型 int
的对象。这些命名对象也称为 variables.
int hogs = 21;
声明 并且 将 hogs
定义为 int
[=46= 类型的对象(变量) ]and 用整数常量 21 的值初始化它。即值 21 最初将存储在其中。此后程序员可以通过分配一个新值给它来改变它。
const int cogs = 21
声明 并且 将 cogs
定义为 const int
[=46= 类型的对象(变量) ]and 用整数常量 21 的值初始化它。 const
作为对象的一种类型表示 程序员 不打算更改的值初始化后的对象(变量)。
但是在 C 中,cogs
不是整数常量,也不是整数常量表达式,它是只是一个 const int
类型的变量 (!)。区别很重要,因为有很多地方需要 整数常量表达式 并且在这些情况下 你根本不能使用任何对象的值,甚至 cogs
:例如switch - case
的标签,具有静态存储持续时间的数组的维度,位域的宽度等...
这里的问题是作者的演讲有点混乱,在什么被认为是整数(类型,作为从整数的数学集合中取出的一组值),整数常量(我猜猜你解释为一种不允许更改的对象,或一个命名的数字),以及一个 整数文字 (这是整数集合的值之一,喜欢 23
)
作者混淆了术语,所以你很困惑。我会尽力解释:
- 整数文字是您用来初始化或分配具体整数值的值。例如
23
.
- 一个整数常量是你不能修改的东西,但是有一个名字来引用它(一个很好的例子,它是一个整数,应该是常量
PI
,但它不是一个好的整数示例 ;) 让我们考虑一个由 N
元素组成的固定数组,您希望在最后一次决定何时给它一个值,但该值在此期间不会改变程序。您有两种定义常量值的方法:
#define N 1024
在这种情况下,您让 C 预处理器始终看到标记 N
,根据它的值更改它,所以它实际上是一个常量,就好像您尝试:
N = 1023;
c 预处理器会将其扩展为:
1024 = 1023;
并且你会得到一个编译错误,由于一个无效的语句(你不能为数字文字分配不同的值)
- 另一种方式是最近的做法:
const int N = 1024;
在这种情况下,编译器将创建一个变量(常量的错误名称;)),您可以在任何程序语句中引用它,但编译器不允许您修改它。如果你尝试
N = 1023;
你会得到一个错误,告诉你 N
是一个常量对象,所以你不能修改它。
有趣的是,每个作者都将字符串文字视为引号之间的一些文本,但他们对整数文字或浮点文字的处理方式却不同。
我是初学者,正在阅读 C primer plus。有一个地方我不能理解。 我知道在整个程序中不能更改常量,当我读到这个时:
Initializing a Variable:
...
int hogs = 21;
int cows = 32, goats =14;
int dogs, cats = 94;
...
The various integers(21, 32, 14, and 94) are integer constants. When you write a number without a decimal point and without an exponent, C recognizes it as an integer.
我对他说的整数常量和整数感到困惑。我想也许他说当你写这个“int hogs = 21;”时,你将 hogs 声明为一个常量。所以我自己编码来检查是否“int hogs = 21;”是否声明常量:
int main()
{
int words = 3020, lines = 350;
printf("there were %d words and %d lines\n", words, lines);
words = 2;
lines = 1;
printf("change %d and %d", words, lines);
return 0;
}
可以改!然后我上网查了下,我知道你应该写这个“const int hogs = 21;”声明一个常量。但是整数常量是什么?什么是“各种整数(21、32、14 和 94)是整数常量。当你写一个没有小数点和指数的数字时,C 将其识别为整数。”。它已经是一个整数,因为您编码了“int hogs =21;”。我想也许他说如果你不声明变量而直接使用一个数字,比如 10,编译器会将该数字识别为整数变量。而10就是他所说的'integer constant'。那么是这样吗?
声明int hogs = 21
是常量,作者的意思只是声明了一个整型变量'hogs',并用常量值21对其进行了初始化。
与“各种整数(21、32、14 和 94)是整数常量”语句类似 - 作者的意思是其他整数变量已分别用常量值 32、14 和 94 初始化。
你对const关键字的理解是完全正确的,const关键字用于声明一个常量整型变量——只能声明一次且值不会改变的变量。
21
是一个整数常量,值为21
,类型为int
.20 + 1
是由整数常量20
和1
和运算符+
组成的表达式,是一个整数常量表达式,值为21
,类型为int
。 (21
本身也是一个 整数常量表达式 。)int bogs;
声明(并可能定义)bogs
为类型int
的对象。这些命名对象也称为 variables.int hogs = 21;
声明 并且 将hogs
定义为int
[=46= 类型的对象(变量) ]and 用整数常量 21 的值初始化它。即值 21 最初将存储在其中。此后程序员可以通过分配一个新值给它来改变它。const int cogs = 21
声明 并且 将cogs
定义为const int
[=46= 类型的对象(变量) ]and 用整数常量 21 的值初始化它。const
作为对象的一种类型表示 程序员 不打算更改的值初始化后的对象(变量)。但是在 C 中,
cogs
不是整数常量,也不是整数常量表达式,它是只是一个const int
类型的变量 (!)。区别很重要,因为有很多地方需要 整数常量表达式 并且在这些情况下 你根本不能使用任何对象的值,甚至cogs
:例如switch - case
的标签,具有静态存储持续时间的数组的维度,位域的宽度等...
这里的问题是作者的演讲有点混乱,在什么被认为是整数(类型,作为从整数的数学集合中取出的一组值),整数常量(我猜猜你解释为一种不允许更改的对象,或一个命名的数字),以及一个 整数文字 (这是整数集合的值之一,喜欢 23
)
作者混淆了术语,所以你很困惑。我会尽力解释:
- 整数文字是您用来初始化或分配具体整数值的值。例如
23
. - 一个整数常量是你不能修改的东西,但是有一个名字来引用它(一个很好的例子,它是一个整数,应该是常量
PI
,但它不是一个好的整数示例 ;) 让我们考虑一个由N
元素组成的固定数组,您希望在最后一次决定何时给它一个值,但该值在此期间不会改变程序。您有两种定义常量值的方法:
#define N 1024
在这种情况下,您让 C 预处理器始终看到标记 N
,根据它的值更改它,所以它实际上是一个常量,就好像您尝试:
N = 1023;
c 预处理器会将其扩展为:
1024 = 1023;
并且你会得到一个编译错误,由于一个无效的语句(你不能为数字文字分配不同的值)
- 另一种方式是最近的做法:
const int N = 1024;
在这种情况下,编译器将创建一个变量(常量的错误名称;)),您可以在任何程序语句中引用它,但编译器不允许您修改它。如果你尝试
N = 1023;
你会得到一个错误,告诉你 N
是一个常量对象,所以你不能修改它。
有趣的是,每个作者都将字符串文字视为引号之间的一些文本,但他们对整数文字或浮点文字的处理方式却不同。