C++笔记(十三)存储持续性,作用域和连接性

//learnc13.h
/*
存储持续性:
1:自动:函数中声明的变量。在执行完函数时内存被释放。
2:静态:函数外和使用static定义的变量。在程序整个运行过程中都存在。
3:线程:使用thread_local声明的变量。
4:动态:使用new分配的内存。会一直存在,直到使用delete释放或者程序运行结束。

作用域描述了名称在文件的多大范围可见。
连接性描述了名称如何在不同文件之间共享。
*/


#ifndef LEARNC13
#define LEARNC13
using namespace std;

struct user {
    int age;
};

void func();


#endif // !LEARNC13
//learnc131.cpp
#include "learnc13.h"
#include<iostream>

int global = 100;//静态存储,外部链接,又叫做外部变量,其他文件可访问

static int internal_1 = 50;//静态存储,内部链接。只能在本文件中访问
const int internal_2 = 30;//静态存储,内部链接。只能在本文件中访问


void func1();
static void func2();//使用 static修饰,表示内部连接,只能在本文件中访问。

void func() {
    int local = 10;//自动存储,函数运行结束及销毁。
    static int count = 0;//静态存储,不可链接,只能在本函数中使用。函数运行结束,不会消失。
    count++;
    internal_1++;
    cout << internal_1 << "   " << internal_2 <<  endl;
    cout << "func函数第" << count << "次调用" << endl;
}

void func1() {
    cout << "func1" << endl;
}

static void func2() {
    cout << "func2" << endl;
}

//learnc13.cpp 存储持续性,作用域和连接性
#include<iostream>
#include "learnc13.h"

extern int global;//使用extern,来连接外部文件定义的外部变量。
extern void func1();
//extern void func2(); 不可用,因为外部文件中func2是static

int main() {

    cout << global << endl;
    func();
    func();

    //调用外部函数
    func1();

    //new运算符动态分配内存
    user *u = new user;
    u->age = 100;

    cout << u->age << endl;
    delete u;

    return 0;
}

输出结果:

100
51   30
func函数第1次调用
52   30
func函数第2次调用
func1
100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值