【发布时间】:2019-12-30 05:18:41
【问题描述】:
世界。我是 CS 领域的新手,通过一本名为“C Primer Plus”的书学习 C 语言。 我有一个关于 C 数据类型的问题(本书的第 3 章)。
书上是这么写的
数据变量和常量
[...] 某些类型的数据在使用程序之前已预设,并在程序的整个生命周期内保持其值不变。这些是常量。其他类型的数据可能会随着程序运行而改变或被赋值;这些是变量。在示例程序中,weight 是一个变量,14.5833 是一个常数。 [...] 变量和常量之间的区别在于,变量可以在程序运行时分配或更改其值,而常量则不能。
以下是示例程序。
/* platinum.c -- your weight in platinum */
#include <stdio.h>
int main(void)
{
float weight;
float value;
printf("Are you worth your weight in platinum?\n");
printf("Let's check it out.\n);
printf("Please enter your weight in pounds: ");
scanf("%f", &weight);
value = 1700.0 * weight * 14.5833;
printf("Your weight in platinum is worth $%.2f.\n", value);
printf("You are easily worth that! If platinum prices drop,\n");
printf("eat more to maintain your value.\n);
return 0;
}
接下来,
数据:数据类型关键字
除了变量和常量的区别之外,还有不同类型数据的区别。 [...] 如果一个数据是一个常量,编译器通常可以通过它的外观来判断它的类型。 [...] 但是,变量需要在声明语句中声明其类型。 [...]
在我阅读以下内容之前,一切对我来说都是有意义的。
初始化变量
initilize 一个变量意味着为它分配一个起始值,或initial。 [...] 以下是一些示例:
int hogs = 21;
int cows = 32, goats = 14
int dogs, cats = 94; /* valid, but poor, form */
以下是,
类型 int 常量
上例中的各种整数(21、32、14 和 94)是整数常量,也称为整数字面量。
这让我很困惑,因为我的理解是常量和变量是不同的。区别之一是声明其类型或不声明。但是声明语句中初始化变量的值称为整数常量。
现在我的问题是
1.为什么数据常量和整型常量/字面量有区别?
2.它们有什么不同?
3.我错过了什么?
感谢您的阅读。
【问题讨论】:
-
好吧,如果你的代码中有
21(它是一个整数文字),你不能把它放在等号的左边。例如21 = 32;没有意义。常数也是一样的,例如const int foo = 21;你不能这样做foo = 32;。现在要注意的重点是foo不是整数文字,但不能修改。要提供命名整数文字,您必须#define FOO 21。重要的是foo直到运行时才知道,而FOO在编译时才知道。如果您尝试int arr[foo];和int arr[FOO];,这会有所不同 -
“我错过了什么?” 是 “为什么重要?” 部分。从概念上讲,您并没有遗漏任何东西(您可能有点想多了)。但是“为什么重要?” 部分归结为编译时已知的内容和运行时已知的内容。定义的常数,例如
#define FOO 21使FOO在编译时已知。它可以用作定义数组的有效文字,例如int arr[FOO];等。虽然简单的const int foo = 21;直到运行时才知道,即使声明的const不是文字。int arr[foo];会生成一个可变长度数组。 -
你是对的。我想多了。谢谢。
-
发生在我们所有人身上——但你问的问题是正确的
:)
标签: c variables int constants literals