C++变量存储的生命周期与作用域实例代码精讲

 更新时间:2022年10月26日 16:39:31   作者:划水猫  
这篇文章主要介绍了C++变量存储的生命周期与作用域,从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。本文将通过示例为大家详细讲讲,感兴趣的可以学习一下

auto类型:非静态的局部变量存储类型都是auto,这些数据存储在栈区,不初始化变量的值时随机的。C++中的auto还可以自动推导类型。生命周期:块内 作用域:块内

程序:

#include <stdio.h>
void test(void);
int main() {
// auto存储类型
    auto b = 13;  // C++新功能,auto自动推导类型
	int a = 12;  // auto存储类型的局部变量,存储在函数栈帧中
	{
		int c = 11;
		printf("%d\n",a);
		printf("%d\n",c);
	}
	test();
	printf("%d\n",a);
    return 0;
}
void test(void) {
	int d = 13;  // auto存储类型的局部变量,存储在函数栈帧中
	printf("%d\n",d);
}

static类型:static静态存储类型的变量,可以作为局部变量和全局变量。作为全局变量的时候不能被外部文件所访问,静态变量只初始化一次,存储在静态区中。也可以用来修饰函数,这样外部文件无法调用该函数。生命周期:整个程序 作用域:全局静态文件内、局部块内

程序:局部静态变量

#include <stdio.h>
#include <windows.h>
void test(void);
int main() {
	test();
	test();
	// printf("%d", a);  static作为局部变量,外面是访问不了的
	system("pause");
	return 0;
}
// 局部静态变量,存储在静态区中
void test(void) {
	static int a = 11;  // 只会被初始化一次
	a++;
	printf("%d\n", a);
}

程序:全局静态变量

#include <stdio.h>
#include <windows.h>
void test(void);
static int b = 33;  // 全局静态变量,外部文件无法访问,存储在静态区中
int main() {
	test();
	printf("%d\n", b);
	system("pause");
	return 0;
}
void test(void) {
	printf("%d\n", b);
}

register类型:寄存器变量,存储在cpu中不在内存中,所以没有地址。可以加快计算机访问。但是在C++中如果一定要去访问寄存器变量那么寄存器变量会被降级成普通变量。寄存器变量不能作为全局变量

程序:

#include <stdio.h>
// register int b = 12;  寄存器变量没法作为全局变量
int main() {
// register变量没有地址
	register int a = 12;
	printf("%d",a);
	printf("%p", &a);  // 强制访问register变量,那么这个变量会变为auto类型
    for(register int i=0; i<1000; i++){  // 加快运行速度写法,但是没必要
    }
	return 0;
}

extern类型:可以访问外部文件中的全局变量,只要在本文件中的变量前加上extern表示他是个外部变量。

程序:

extern.h

#ifndef _EXTER_H_
#define _EXTER_H_
#include <stdio.h>
void test1();
#endif

extern_test.cpp

#include "exter.h"
int c = 44;
int d = 55;  // 这里不要写extern int d;这是错误的  ,也不要写成extern int d=55这个是对的但是不推荐
void test1() {
	printf("extern_test_c_addr:%p\n", &c);
	printf("extern_test_d_addr:%p\n", &d);
}

man.cpp

#include <stdio.h>
#include <windows.h>
#include "exter.h"
void test(void);
extern int d;  //  extern拿到其他文件变量并作为本文件的全局变量
int main() {
// extern拿到其他文件变量并作为本文件的局部变量
	extern int c;
	printf("c=%d\n",c);
	c = 12;
	printf("c=%d\n",c);
	printf("d=%d\n",c);
	test();
	test1();
	printf("extern_test_c_addr:%p\n", &c);
	printf("main_d_addr:%p\n", &d);
	system("pause");
	return 0;
}
void test(void) {
	printf("test d=%d\n",d);
	//printf("c=%d\n", c);  局部变量访问不了
}

到此这篇关于C++变量存储的生命周期与作用域实例代码精讲的文章就介绍到这了,更多相关C++生命周期与作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VC++中内存对齐实例教程

    VC++中内存对齐实例教程

    这篇文章主要介绍了VC++中内存对齐的实现方法,具有很高的实用价值,需要的朋友可以参考下
    2014-08-08
  • C++ 线段树原理与实现示例详解

    C++ 线段树原理与实现示例详解

    这篇文章主要为大家介绍了C++ 线段树原理与实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C++链表实现通讯录管理系统

    C++链表实现通讯录管理系统

    这篇文章主要为大家详细介绍了C++链表实现通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 深入探讨C++ OpenCV如何实现图像矫正

    深入探讨C++ OpenCV如何实现图像矫正

    这篇文章主要为大家详细介绍了C++ OpenCV如何实现简单的图像矫正功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C语言报错:Format String Vulnerability的多种解决方案

    C语言报错:Format String Vulnerability的多种解决方案

    Format String Vulnerability(格式化字符串漏洞)是C语言中常见且严重的安全漏洞之一,它通常在程序使用不受信任的输入作为格式化字符串时发生,本文将详细介绍Format String Vulnerability的产生原因,提供多种解决方案,需要的朋友可以参考下
    2024-06-06
  • C++中与输入相关的istream类成员函数简介

    C++中与输入相关的istream类成员函数简介

    这篇文章主要介绍了C++中与输入相关的istream类成员函数简介,包括eof函数和peek函数以及putback函数还有ignore函数,需要的朋友可以参考下
    2015-09-09
  • 详解C++中赋值和输入输出语句的用法

    详解C++中赋值和输入输出语句的用法

    这篇文章主要介绍了详解C++中赋值和输入输出语句的用法,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言之预处理命令的深入讲解

    C语言之预处理命令的深入讲解

    这篇文章主要给大家介绍了关于C语言之预处理命令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言超详细讲解猜数字游戏的实现

    C语言超详细讲解猜数字游戏的实现

    现在很多游戏都有抽奖抽卡的功能,其实这个就类似于猜数字,生成一个随机数,然后你去猜,猜对了就得奖。猜到一定次数就会保底。要实现猜数字的小游戏,首先是要让程序生成随机数,这就要用到rand、srand和time这三个函数,其次要了解时间戳
    2022-07-07
  • C语言结构体链表和指针实现学生管理系统

    C语言结构体链表和指针实现学生管理系统

    这篇文章主要介绍了C语言结构体链表和指针实现学生管理系统,包括学生档案管理子系统和学生成绩管理子系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论