register 与 const
提示与不可变性
register 与 const 是 CoddyKit 上的免费 C Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C Academy 课程共包含 4 节课。
register 提示
register 建议将变量保存在 CPU 寄存器中以提高速度。它只是一个提示;现代编译器通常会忽略它。
#include <stdio.h>
int main(void) {
register int i;
int sum = 0;
for (i = 0; i < 5; i++)
sum += i;
printf("sum = %d\n", sum);
return 0;
}不能获取其地址
由于 register 变量可能不在内存中,因此不能使用 & 获取它的地址。
#include <stdio.h>
int main(void) {
register int x = 10;
printf("x = %d\n", x);
return 0;
}register 如今很少使用的原因
优化编译器已经能够将高频使用的变量放入寄存器。如今这个关键字主要只具有历史意义。
#include <stdio.h>
int main(void) {
int product = 1;
for (register int i = 1; i <= 4; i++)
product *= i;
printf("product = %d\n", product);
return 0;
}const 限定符
const 使变量在初始化后只读。尝试修改它会产生编译错误。
#include <stdio.h>
int main(void) {
const int DAYS = 7;
printf("DAYS = %d\n", DAYS);
return 0;
}常量表达设计意图
对固定值使用 const 可以让代码更清晰,并防止意外修改。
#include <stdio.h>
int main(void) {
const double PI = 3.14159;
double r = 2.0;
printf("area = %.2f\n", PI * r * r);
return 0;
}const 与指针
const int *p 表示不能通过 p 修改所指向的值,但指针本身仍可以指向其他位置。
#include <stdio.h>
int main(void) {
int x = 5;
const int *p = &x;
printf("*p = %d\n", *p);
return 0;
}常量指针
int * const p 表示指针不能改变,但它所指向的值可以改变。
#include <stdio.h>
int main(void) {
int x = 5;
int * const p = &x;
*p = 9;
printf("x = %d\n", x);
return 0;
}const 函数参数
将参数标记为 const,表示函数不会修改它,这有助于调用者理解函数行为。
#include <stdio.h>
void show(const int n) {
printf("n = %d\n", n);
}
int main(void) {
show(42);
return 0;
}按设计保持不可变
对于任何不应改变的值,请优先使用 const。它可以在编译时发现错误。
#include <stdio.h>
int main(void) {
const int LIMIT = 100;
int x = 90;
if (x < LIMIT)
printf("under limit\n");
return 0;
}结合使用 const 与全局变量
全局 const 是一种安全的共享常量,整个文件都可以使用它。
#include <stdio.h>
const int VERSION = 2;
int main(void) {
printf("VERSION = %d\n", VERSION);
return 0;
}同时使用 register 和 const
您甚至可以同时采用这两种方式标记循环计数器,不过这里的 const 表示循环体不能修改它。
#include <stdio.h>
int main(void) {
int sum = 0;
for (int i = 0; i < 3; i++) {
const int doubled = i * 2;
sum += doubled;
}
printf("sum = %d\n", sum);
return 0;
}快速检查
请检验您对 register 和 const 的理解。
回顾:register 与 const
您已经了解了两种限定符。
register提示使用寄存器存储,但通常会被忽略- 不能获取 register 变量的地址
const使值变为只读- 指针的 const 性有两种形式:常量值和常量指针
- 请广泛使用
const来提高安全性
常见问题解答
「register 与 const」课时是免费的吗?
是的 — 「register 与 const」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C Academy 课程的其余内容,请升级到 CoddyKit PRO。 C Academy 课程共包含 4 节课。
「register 与 const」这节课中我会学到什么?
提示与不可变性 你通过在浏览器中直接运行的动手代码来练习 C Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「register 与 const」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C Academy 课中编写并运行代码吗?
能。每节 C Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- auto 与局部作用域
- static 变量
- extern 与全局变量
- register 与 const