C/Cxx-静态数据类型

2024-01-17 05:52
文章标签 类型 静态数据 cxx

本文主要是介绍C/Cxx-静态数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

静态局部变量相比于普通的局部变量有什么区别?
近期自学Programming Abstractions in C++ pp.104时的困惑。经典使用

/** Implementation notes: initRandomSeed* ------------------------------------* The initRandomSeed function declares a static variable that keeps track* of whether the seed has been initialized. The first time initRandomSeed* is called, initialized is false, so the seed is set to the current time.*/
void initRandomSeed()
{static bool initialized = false;if(!initialized){srand(int (time(NULL)));initialized = true;}
}
  1. What is the difference between a static local variable and a regular local variable?

In C and C++, the key differences between a static local variable and a regular (non-static) local variable lie in their lifetime, scope, and initialization. Here’s a detailed comparison:
Lifetime
Static Local Variable:
Has a lifetime that extends across the entire runtime of the program.
It is initialized only once, the first time the control flow passes through its declaration, and retains its value between function calls.
Regular Local Variable:
Has a lifetime that is limited to the function call in which it is defined.
It is created when the function is called and destroyed when the function exits.
Each time the function is called, the variable is reinitialized.
Scope
Both static and regular local variables:
Have the same scope, which is limited to the function (or block) in which they are defined.
Cannot be accessed outside of that function.
Initialization
Static Local Variable:
If not explicitly initialized, it is automatically initialized to zero (for basic data types) or default-initialized (for class instances).
Regular Local Variable:
If not initialized, it contains an indeterminate value (usually garbage) unless it’s an object of a class with a constructor.
Storage
Static Local Variable:
Stored in a static or global data area, not on the stack.
Regular Local Variable:
Stored on the stack (unless optimized otherwise by the compiler).
Example

void function() {static int staticVar = 0; // Static local variableint regularVar = 0;       // Regular local variablestaticVar++;regularVar++;std::cout << "Static: " << staticVar << ", Regular: " << regularVar << std::endl;
}
// Calling function multiple times
function(); // Output: Static: 1, Regular: 1
function(); // Output: Static: 2, Regular: 1
function(); // Output: Static: 3, Regular: 1

In this example, each call to function() increments both staticVar and regularVar. However, staticVar retains its value between calls (since it’s static), while regularVar is reinitialized to 0 each time the function is entered.
Use Cases
Static Local Variables: Useful for maintaining state within a function across multiple calls, such as for caching results, counting the number of times a function is called, or managing resources that need to persist across function calls.
Regular Local Variables: Used for calculations and operations that do not require persistence between different calls to the function.
In summary, the choice between a static local variable and a regular local variable depends on whether you need the variable to retain its value between function calls and exist for the duration of the program.

这篇关于C/Cxx-静态数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/615047

相关文章

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1