全局变量的内部链接

在这一章中我们涉及了很多材料。好的工作,你做的很好!
一个语句块(又名。一个复合语句)由编译器处理,好像它是一个语句一样。这些都放在大括号({和})之间,并且在任何地方都使用过。
当该块是输入的一部分,当它退出时被破坏时,局部变量被创建。他们只能在他们被声明的块内访问。
全局变量在程序启动时被创建,并且在结束时被销毁。他们可以在程序中使用任何地方。非const的全局变量,一般应避免因为他们是邪恶的。
静态关键字可以用来提供一个全局变量的内部链接,所以它只能在声明它的文件中使用。它也可以用来给一个局部变量的静态持续时间,这意味着本地变量保留它的值,即使它超出范围。
命名空间是一个区域中的所有名称的唯一性是有保证的。命名空间的使用是避免命名冲突的一个伟大的方法。避免使用“使用语句”功能以外的功能。
当一个类型转换成另一种类型而不使用强制转换时,会发生隐式类型转换。当一个类型转换为另一个使用强制转换时,将发生显式类型转换。在某些情况下,这是完全安全的,而在其他情况下,数据可能会丢失。避免使用C风格转换和static_cast相反。


指针的算术运算
C++语言允许你对指针进行整数的加减运算。如果指针指向一个整数,PTR + 1后的下一个整数PTR在内存中的地址。PTR - 1在PTR的整数地址。
值得注意的是,PTR + 1不在PTR返回的内存地址,但内存地址,ptr指向下一个对象的类型。如果指针指向一个整数(假设4个字节),PTR + 3在PTR 3个整数,这是12的内存地址在PTR。如果指针指向一个char,它总是1字节,PTR + 3在PTR 3字符,这是3的内存地址在PTR。
计算一个指针算术表达式的结果时,编译器总是乘以整数操作数所指向对象的大小。这被称为缩放。
考虑下面的程序:

#include <iostream>
 
int main()
{
    int value = 7;
    int *ptr = &value;
 
    std::cout << ptr << '\n';
    std::cout << ptr+1 << '\n';
    std::cout << ptr+2 << '\n';
    std::cout << ptr+3 << '\n';
 
    return 0;
}


### C/C++ 中内部链接静态变量是否属于全局变量 #### 定义与特性 在 C/C++ 编程语言中,**静态变量**是一种特殊的存储类别,其生命周期贯穿整个程序运行期间。当提到 **内部链接静态变量** 时,通常指的是具有文件作用域的静态变量(即定义在函数外部并带有 `static` 关键字修饰的变量)。这种类型的变量仅限于当前源文件可见,并不被其他翻译单元共享。 尽管这些变量的作用范围受到限制,它们仍然具备全局变量的一些特征,比如在整个程序执行过程中保持存在[^1]。然而,由于其链接属性设置为内部链接(internal linkage),因此它不属于严格意义上的全局变量。具体来说: - 全局变量默认拥有外部链接(external linkage),这意味着它可以跨多个源文件访问。 - 使用 `static` 限定符声明的变量则会改变这一行为,使其变为内部链接,从而无法通过外部机制访问该变量。 #### 访问控制差异 对于普通的全局变量而言,在一个文件中可以通过 `extern` 声明来获取它的地址进而操作数据;但是针对那些标记成 static 的所谓“全局”变量,则完全不可能实现上述过程因为编译器不会将其导出给别的模块知晓[^2]。 下面给出一段示例代码展示两者之间的区别: ```cpp // FileA.cpp #include <iostream> int globalVar = 42; // 外部链接全局变量 static int fileStaticVar = 8; // 内部链接的静态变量 void printVars() { std::cout << "globalVar: " << globalVar << ", fileStaticVar: " << fileStaticVar << std::endl; } // FileB.cpp #include <iostream> extern int globalVar; // 可以外部引用 // extern int fileStaticVar; // 错误:fileStaticVar 是 internal linkage int main() { std::cout << "In FileB, globalVar: " << globalVar << std::endl; return 0; } ``` 在这个例子当中可以看到我们能够成功地从不同文件里调用 `globalVar`, 而尝试同样方法去处理 `fileStaticVar` 就会出现错误提示表明它是不可见也无法直接使用的资源之一[^3]. 综上所述,C/C++中的内部链接静态变量并不真正归属于传统概念下的全局变量范畴之内. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值