揭秘计算机内存管理:从补码到类型限定符

各类资料学习下载合集

​https://pan.quark.cn/s/8c91ccb5a474​

你好!在前面的文章中,我们探讨了计算机中数值是如何以二进制形式存储的,特别是了解了**补码(Two's Complement)**这种高效的表示方法,它统一了零的编码,并简化了加减运算。

今天,我们将继续深入计算机内存的世界,但这次我们将聚焦于变量的声明和管理。你知道吗?在C/C++等语言中,除了指定变量的数据类型(如 ​​int​​, ​​char​​, ​​float​​),我们还可以使用一些特殊的关键词来“限定”变量的属性或用途。这些关键词被称为类型限定符(Type Qualifiers)

理解这些限定符,能帮助我们更好地与编译器“沟通”,影响变量的存储位置、可变性以及编译器对它的优化方式。本文将详细介绍 C/C++ 中常见的四种类型限定符:​​extern​​、​​const​​、​​volatile​​ 和 ​​register​​,并通过代码示例展示它们的用法和效果。


1. ​​extern​​ 限定符:声明,而非定义

1.1 作用

​extern​​ 限定符用于声明一个变量或函数,表明它的定义(即实际分配存储空间和可能的初始化)在程序的其他地方(通常是另一个源文件)进行。它告诉编译器:“嘿,这个变量/函数是存在的,你会在链接阶段找到它,所以现在先别报错。”

1.2 特点

  • ​extern​​ 只是一个声明,它不会在当前位置为变量分配内存空间。
  • 因此,你不能在使用 ​​extern​​ 声明变量的同时进行初始化(除非这个初始化是针对一个已经在别处定义过的变量,但这种写法不常见且容易混淆)。尝试对一个只有 ​​extern​​ 声明但没有对应定义的变量进行访问或赋值,会在链接阶段出错。

1.3 代码示例

考虑有两个源文件:​​main.c​​ 和 ​​helper.c​​。

文件:​​helper.c​

// helper.c
#include <stdio.h>

// 在这里定义一个全局变量,并初始化
int external_variable = 100;

// 定义一个函数
void print_external_variable() {
    printf("在 helper.c 中访问 external_variable: %d\n", external_variable);
}

文件:​​main.c​

// main.c
#include <stdio.h>

// 使用 extern 声明 external_variable,告诉编译器它在别处定义
extern int external_variable;

// 使用 extern 声明 print_external_variable 函数
extern void print_external_variable();

int main() {
    printf("在 main.c 中访问 external_variable (声明):%d\n", external_variable);

    // 尝试修改 external_variable 的值
    external_variable = 200;
    printf("在 main.c 中修改后访问 external_variable:%d\n", external_variable);

    // 调用在 helper.c 中定义的函数
    print_external_variable();

    // --- 错误示例:尝试在 extern 声明时赋值 (通常不允许或行为未定义) ---
    // extern int another_var = 50; // 这一行通常会导致编译错误或警告,取决于编译器和标准
    // printf("尝试在声明时赋值的变量:%d\n", another_var); // 如果上面没报错,这里也可能出错

    // --- 错误示例:如果 external_variable 没有在任何地方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值