变量之间的区别

全局变量、局部变量、静态全局变量、静态局部变量的区别
c++变量根据定义具有不同的生命周期,会有不同的作用域,主要有六个作用域:全局作用域局部作用域文件作用域类作用域语句作用域命名空间作用域

从作用域看
全局变量:具有全局作用域,全局变量只需在一个源文件定义,就能在所有的文件中使用。在不含有该全局变量的文件中使用时,需要用extern的关键字声明这个变量
静态全局变量:具有文件作用域,它只作用域定义该变量的文件中,不能作用域其他文件。
**局部变量:**具有局部作用域,在程序运行期间并不是一直存在,而是只在函数运行期间存在,函数调用完成后,该变量就自动销毁
静态局部变量:具有局部作用域,它只初始化一次,在程序运行期间一直存在,与静态全局变量的区别在于,静态全局变量在该源文件的所有函数是可见的,而静态局部变量旨在只在定义该变量的函数中可见。

内存空间看:

  • 静态全局变量、静态局部变量、全局变量都是在静态存储区(.bss 和 .data段)
  • 局部变量是在栈区

静态变量栈变量(存储在栈中的变量)、堆变量(存储在堆中的变量)的区别:静态变量存储在静态存储区(.data段)中,在下一次调用时它能恢复到原来的数值,栈变量、堆变量不能保证是原来的值

全局变量静态变量的区别:静态变量用static关键字修饰,只在自己的作用域上可见,全局变量是所有文件都可见

注意:全局变量定义在头文件中有什么问题?
如果在头文件中定义全局变量,在多个文件#include这个头文件时,会出现全局变量重复定义,全局变量的作用域是所有文件都有使用的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机的网络体系以及参考模型

计算机的网络体系以及参考模型一、OSI七层模型二、TCP/IP参考模型三、TCP/IP 五层参考模型四、OSI 模型和 TCP/IP 模型异同比较五、OSI 和 TCP/IP 协议之间的对应关系六、为什么 TCP/IP 去除了表示层和会话层?七、数据如何在各层之间传输(数据的封装过程…

C++ 模板详解(二)

转载:http://www.cnblogs.com/gw811/archive/2012/10/25/2736224.html 四、类模板的默认模板类型形参 1、可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值。 2、类模板的类…

c++类对象的创建方式

对象创建限制在堆或栈 c类对象的创建方式对象创建限制在堆或栈C 中的类的对象的建立模式如何将类限制在堆上呢?C 中的类的对象的建立模式 C 中的类的对象的建立模式分为两张:静态建立,动态建立 静态建立:由编译器为对象在栈空间…

C++ 模板详解(一)

转载:http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html C模板 模板是C支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类…

剑指Offer09. 用两个栈实现队列

class CQueue { public:stack<int> stack1,stack2;CQueue() {//初始化栈while(!stack1.empty()){stack1.pop();}while(!stack2.empty()){stack2.pop();}}void appendTail(int value) {stack1.push(value);}int deleteHead() {if(stack2.empty()){while(!stack1.empty()){…

rk3588 之启动

目录 uboot版本配置修改编译 linux版本配置修改编译 启动sd卡启动制作spi 烧录 参考 uboot 版本 v2024.01-rc2 https://github.com/u-boot/u-boot https://github.com/rockchip-linux/rkbin 配置修改 使用这两个配置即可&#xff1a; orangepi-5-plus-rk3588_defconfig r…

C++引用详解

转载&#xff1a;http://www.cnblogs.com/gw811/archive/2012/10/20/2732687.html 引用的概念 引用&#xff1a;就是某一变量&#xff08;目标&#xff09;的一个别名&#xff0c;对引用的操作与对变量直接操作完全一样。 引用的声明方法&#xff1a;类型标识符 &引用名目标…

剑指Offer03.数组中重复的数字

找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1a; 输入&…

C++ 模板全特化中的函数特化

转载&#xff1a;http://blog.csdn.net/rain_qingtian/article/details/15815251 [cpp] view plaincopy print?#include <iostream> using namespace std; template<typename T> bool isLess(T x, T y) { cout << "general version\n&q…

c++面向对象总结

c面向对象总结什么是面向对象&#xff1f;面向对象的三大特性重写和重载的区别隐藏和重写&#xff0c;重载的区别什么是多态&#xff1f;多态如何实现什么是面向对象&#xff1f;面向对象的三大特性 面向对象&#xff1a;对象是指具体的某一个事物&#xff0c;这些事物的抽象就…

类模板static成员的使用

转载&#xff1a;http://blog.csdn.net/ljq32/article/details/7911390 1. 与普通类的static成员一样&#xff0c;类内部声明一次&#xff0c;类外部定义一次&#xff0c;定义时可以设置也可以不设置初始值; 2. 类模板内部声明与普通类的static成员一致&#xff1a; [html] vi…

Linux网络编程服务器模型选择之循环服务器

转载&#xff1a;http://www.cnblogs.com/lizhenghn/p/3617608.html 在网络程序里面&#xff0c;通常都是一个服务器处理多个客户机&#xff0c;为了出个多个客户机的请求&#xff0c;服务器端的程序有不同的处理方式。本节开始介绍Linux下套接字编程的服务器模型选择&#xff…

剑指Offer04. 二维数组中的查找

在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 相当于二叉搜索树,左孩子比根节点小&…

Linux网络编程服务器模型选择之并发服务器(上)

转载&#xff1a;http://www.cnblogs.com/lizhenghn/p/3617666.html 与循环服务器的串行处理不同&#xff0c;并发服务器对服务请求并发处理。循环服务器只能够一个一个的处理客户端的请求&#xff0c;显然效率很低。并发服务器通过建立多个子进程来实现对请求的并发处理。并发…

剑指Offer10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 示例 1&#xff1a; 输入&a…

Linux网络编程服务器模型选择之并发服务器(下)

转载&#xff1a;http://www.cnblogs.com/lizhenghn/p/3618986.html 前面两篇文章&#xff08;参见&#xff09;分别介绍了循环服务器和简单的并发服务器网络模型&#xff0c;我们已经知道循环服务器模型效率较低&#xff0c;同一时刻只能为一个客户端提供服务&#xff0c;而且…

剑指Offer05. 替换空格

请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 1&#xff1a; 输入&#xff1a;s “We are happy.” 输出&#xff1a;“We%20are%20happy.” class Solution { public:string replaceSpace(string s) {int count0;int lens.size();stri…

Linux网络编程服务器模型选择之IO复用循环并发服务器

转载&#xff1a;http://www.cnblogs.com/lizhenghn/p/3619091.html 在前面我们介绍了循环服务器&#xff0c;并发服务器模型。简单的循环服务器每次只能处理一个请求&#xff0c;即处理的请求是串行的&#xff0c;效率过低&#xff1b;并发服务器可以通过创建多个进程或者是线…

数据结构(六)二叉树的遍历(递归非递归方法)

数据结构&#xff08;六&#xff09;二叉树的遍历&#xff08;递归非递归方法&#xff09; 一、递归方法 1.先序遍历 void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrder(T->RChild) }2.先序遍历 void PreOrder(BiTree T) {PreOrder(T->LChild)visit…

memcpy/memset函数的c语言实现

转载&#xff1a;http://blog.csdn.net/u011118276/article/details/46742341 1、memcpy 头文件&#xff1a;#include <string.h> 函数原型&#xff1a;void *memcpy(void *dest, const void *src, size_t n) 功能&#xff1a;将指针src指向的内存空间的n个字节复制到des…