C语言变量与强制类型转换深度解析

        在上一篇文章中,小编对数据类型进行了详细的讲解与剖析,所以本篇文章小编要带大家理解变量和强制类型转。还是老规矩,来波鸡汤,学习一定不能着急,无法一下就学明白的知识我们需要给他时间,一定不要在一个知识点上死磕,让大脑缓一缓,有些知识是要等到知识积累到一定的程度才能够学会的。

1. 变量

1.1 变量的创建

        上篇文章中我们深度学习了数据类型,那我们为什么学习数据类型呢?因为数据类型是用来创建变量的;变量是什么呢?在C语言中,把经常变化的值称为变量,不变的值称为常量。下面给各位读者展示创建变量的语法形式:

data_type name;|       ||       |
数据类型  变量名int age; //整型变量的创建
char ch; //字符变量的创建
double weight; //浮点型变量的创建

        在创建变量的时候就给定一个初始值,这样的操作叫做初始化:

int Age = 18;
char c = 'k';
double weight = 75.0;
unsigned int height = 181;

        需要强调的一点是,在我们创建变量的时候一定要记得去初始化;在VS2022中十分严谨,未经过初始化的变量是不允许使用的;一个变量在未初始化状态下,它的值是一个随机值,下面小编就给大家附上图片供读者参考:

未初始化本地变量得到的随机值(VS2022环境下)
未初始化本地变量得到的随机值(Dev c++)

         这是两个同编译器下未初始化本地变量得到的随机值,我们总结一下:创建变不初始化得到的随机值,取决于我们所使用的编译器,VS2022 x64环境下,我们通过F10/F11这两个键可以进入调试环节,观察发现整型变量a未初始化得到的是整数597;而在Dev c++环境下,整型变量a未初始化得到的是整数1389922;这也证明了变量初始化的重要性。

1.2 变量的分类

1.2.1 全局变量

        在所有函数外部(包括主函数)定义的变量就是全局变量,全局变量的使用范围更广,想在整个工程中使用都是可以的,下面给大家附上代码:

#include <stdio.h>char global_variable = 'g'; //在所有函数外部定义的变量就是全局变量void function()
{//在自定义函数内部可以直接使用全局变量printf("The value of the global variable in function: %d\n", global_variable);
}
int main()
{function();// 在主函数中同样可以直接使用全局变量printf("The value of the global variable in main: %c\n", global_variable);return 0;
}

        在上述的代码块中,global_variable就是全局变量,它在主函数以及其他函数中都是可以被直接访问和使用的,全局变量的作用域是从它的定义点开始,一直到整个源文件结束。这意味着在同一个源文件内,定义点之后的所有函数都可以直接访问该全局变量;全局变量的生存期是整个程序的运行期间。也就是说,从程序开始运行,全局变量就被创建并占用内存空间,直到程序结束运行,它所占用的内存才会被释放。

        全局变量的优点:由于其作用域广泛,多个函数可以很方便地共享全局变量所存储的数据,无需在函数间频繁传递参数来传递相同的数据;全局变量的缺点也很明显:全局变量在整个程序运行期间都占用内存空间,即使在某些阶段这些变量暂时不需要被使用,它们仍然占据着内存,可能会导致内存资源的浪费,尤其是在内存资源有限的情况下。

1.2.2 局部变量

        局部变量是在函数内部定义的变量。它的定义位置只能在函数体内部,包括在函数的复合语句内定义的变量也属于局部变量,局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用,下面给大家附上代码:

#include <stdio.h>void function()
{char local_variable = 'x'; //在function1函数内定义的变量就是局部变量printf("The value of the local variable in function: %c\n", local_variable);
}int main()
{function();//在主函数中无法访问function函数内定义的局部变量//因为局部变量的作用域仅限于定义它的函数体内部return 0;
}

        在上述的代码块中,local_variable就是定义在function( )函数内部的局部变量,它只能在function()内部被访问和使用,局部变量的作用域仅限于定义它的函数内部。也就是说,一旦离开了定义该局部变量的函数体,就无法再访问这个局部变量了。局部变量的生存期是从它被定义的那一刻开始,到定义它的函数执行完毕结束。当函数执行完毕后,局部变量所占用的内存空间会被立即释放,以便为其他程序部分腾出内存。

        局部变量的优点:避免了命名的冲突,由于局部变量的作用域仅限于所在函数内部,所以不同函数可以使用相同的变量名来定义局部变量,而不会产生命名冲突。局部变量在函数执行完毕后就会被释放内存,不会像全局变量那样在整个程序运行期间一直占用内存,这样可以更有效地利用内存资源。但是局部变量也是有缺点的,因为局部变量的作用域有限,不同的函数之间不能很好的进行数据的共享,需要通过传参和返回值等方式实现,这增加了程序的复杂性。

1.2.3 全局变量在内存中的存储

        我们在学习C/C++语言的时候,会关注内存的三个区域:栈区堆区静态区。小编今天简单给大家介绍一下,不进行太过复杂的讲解,其实内存区域的划分会更加细致,以后在操作系统的相关知识的时候会给读者们详细介绍。

内存三区的大致描绘

        局部变量存储在内存中的栈区,全局变量存储在内存中的静态区,堆区是用来做动态内存管理的(后期会给大家详细介绍)。

2.强制类型转换

        有一种特殊的操作符是强制类型转换,他的语法形式很简单:

(类型)

        那我们如何去使用呢?演示如下:

int a = 3.1415926;
//a的是int类型, 3.1415926是double类型,赋值操作符左右两边的数据类型不一致,编译器会报警

        为了消除这个警告,我们可以使用强制类型转换:

1 int a = (int)3.1415926;//将3.1415926强制类型转换为int类型,这种强制类型转换只取整数部分

        有句话叫做:强扭的瓜不甜,不到万不得已的时候我们最好不要使用强制类型转换,如果能不使用强制类型转换就实现代码更好。

3. 结语

        小编希望本篇文章能够给读者带来一些帮助,如有写的不好的地方,还望读者们多提意见、分享观点,如果读者能理解本篇文章的内容,将会使得C语言的学习更加的轻松。

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

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

相关文章

蓝桥杯 Python组-神奇闹钟(datetime库)

神奇闹钟 传送门&#xff1a; 0神奇闹钟 - 蓝桥云课​​​​​​ 问题描述 小蓝发现了一个神奇的闹钟&#xff0c;从纪元时间&#xff08;1970 年 11 日 00&#xff1a;00&#xff1a;00&#xff09;开始&#xff0c;每经过 x 分钟&#xff0c;这个闹钟便会触发一次闹铃 (…

国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台

​在当今的互联网时代&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;受到了越来越多用户的喜爱。为了提供更好的用户体验和满足用户需求&#xff0c;一个好的短剧系统需要具备多元化的功能和优质的界面设计。 本文将介绍国内短剧源码短剧系统搭建小程序部署H5、APP所需的…

faiss里面SQ量化4bit是啥意思?具体举例并解释

FAISS&#xff08;Facebook AI Similarity Search&#xff09;是一个用于高效相似性搜索和聚类的库&#xff0c;支持多种量化技术来加速搜索过程。其中&#xff0c;SQ量化&#xff08;Scalar Quantization&#xff09;是一种常见的量化方法&#xff0c;它将浮点数向量转换为整数…

Synchronized 的几种用法解析

背景介绍 说到并发编程&#xff0c;总绕不开线程安全的问题。 实际上&#xff0c;在多线程环境中&#xff0c;难免会出现多个线程对一个对象的实例变量进行同时访问和操作&#xff0c;如果编程处理不当&#xff0c;会产生脏读现象。 线程安全问题 我们先来看一个简单的线程…

rhce作业4

问题&#xff1a; 1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 配置&#xff1a; 主服务器配置 安装 关闭防火墙 主配置文件定义正反向解析域 正向解析资源记录文件 反向解析记录文件 重启…

FPGA设计中IP核的应用与定制开发!!!

在FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;IP核&#xff08;Intellectual Property Core&#xff09;是一种重要的设计组件。IP核可以是预先设计好的、可重用的硬件设计模块&#xff0c;它们可以加速开发过程&#xff0c;提高设计效率&#xff0c;并确…

在数据抓取的时候,短效IP比长效IP有哪些优势?

在数据抓取领域&#xff0c;代理IP的选择对于任务的成功率和效率至关重要。短效IP和长效IP各有其特点和适用场景&#xff0c;但在数据抓取过程中&#xff0c;短效IP因其独特的优势而受到青睐。本文将和大家一起探讨短效IP在数据抓取中相比长效IP的优势。 短效IP的定义与特点 …

B2C分销管理系统(源码+文档+部署+讲解)

本文将深入解析“B2C分销管理系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 "B2C分销管理系统"是一款集产品管理、客户服务、运营监控和财务管理于一体的综合性分销管理平台。系统功能全面覆盖套餐管理、SI…

【前端基础】CSS基础

目标&#xff1a;掌握 CSS 属性基本写法&#xff0c;能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#…

Java什么是变量?变量有什么用?

什么是变量&#xff1f;变量有什么用&#xff1f; 编程的本质就是对内存中的数据的访问和修改。程序所用的数据都会保存在内存中&#xff0c;程序员需要一种机制来访问或修改内存中的数据。这种机制就是变量&#xff0c;每个变量都代表了某一小块内存&#xff0c;而且变量是有…

CertiK发现三星区块链密钥库的高风险漏洞,第3次获得致谢

2024年11月5日&#xff0c;CertiK因发现三星手机区块链密钥库&#xff08;Blockchain Keystore&#xff09;的一个高风险漏洞&#xff0c;第3次获得三星的认可与致谢。三星Keystore通过移动硬件安全技术&#xff0c;为私钥的存储与签名过程提供坚固的防护。该漏洞得到及时修复&…

阿里云docker安装禅道记录

docker network ls docker network create -d bridge cl_network sudo docker run --name zentao --restart always -p 9982:80 --networkcl_network -v /data/zentao:/data -e MYSQL_INTERNALtrue -d hub.zentao.net/app/zentao:18.5 升级禅道 推荐用按照此文档升级&a…

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求&#xff1a;检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有&#xff1a;“滚蛋”&#xff0c;“滚蛋吧你”&#xff0c;“有病”&#xff0c; 可使用的方法有&#xff1a; 遍历敏感词&#xff0c;判断文本中是否含有这个敏感词。 …

ESG是什么,有什么重要意义,怎么进行评级提升

ESG是Environmental&#xff08;环境&#xff09;、Social&#xff08;社会&#xff09;和Governance&#xff08;治理&#xff09;三个英文单词的首字母缩写&#xff0c;是从环境、社会、公司治理等三个非财务维度来评价企业的指标&#xff0c;评估企业在促进经济可持续发展、…

远程控制项目第四天 功能实现

发送屏幕内容 代码详解 1. 创建 CImage 对象并获取屏幕内容 首先&#xff0c;我们创建一个 CImage 对象&#xff0c;用于接收屏幕上的内容。要获取屏幕内容&#xff0c;我们需要先获取当前设备上下文&#xff08;DC&#xff09;。调用 ::GetDC(NULL) 函数&#xff0c;参数 NU…

多分类logistic回归分析案例教程

因变量为无序多分类变量&#xff0c;比如研究成人早餐选择的相关因素&#xff0c;早餐种类包括谷物类、燕麦类、复合类&#xff0c;此时因变量有三种结局&#xff0c;而且三种早餐是平等的没有顺序或等级属性&#xff0c;此类回归问题&#xff0c;可以使用多分类Logistic回归进…

工业相机常用功能之白平衡及C++代码分享

目录 1、白平衡的概念解析 2、相机白平衡参数及操作 2.1 相机白平衡参数 2.2 自动白平衡操作 2.3 手动白平衡操作流程 3、C++ 代码从XML读取参数及设置相机参数 3.1 读取XML 3.2 C++代码,从XML读取参数 3.3 给相机设置参数 1、白平衡的概念解析 白平衡(White Balance)…

越权访问漏洞

V2Board Admin.php 越权访问漏洞 ## 漏洞描述 V2board面板 Admin.php 存在越权访问漏洞&#xff0c;由于部分鉴权代码于v1.6.1版本进行了修改&#xff0c;鉴权方式变为从Redis中获取缓存判定是否存在可以调用… V2Board Admin.php 越权访问漏洞 漏洞描述 V2board面板 Admin.ph…

[C++ 核心编程]笔记 4.4.2 类做友元

4.4.2 类做友元 关键步骤: 在另一个类中使用 friend class 类名 拓展: 在类外写成员函数(已在类内声明, 实现可以写在外面): //类外写成员函数 Building::Building() {m_SittingRoom "客厅";m_BedRoom "卧室"; }GoodGay::GoodGay() {//创建建筑物对象…

W外链如何设置活码功能?

根据搜索结果&#xff0c;W外链平台的活码功能允许用户创建动态二维码&#xff0c;这些二维码背后可以链接到不同的目标链接或页面&#xff0c;并且可以根据预设条件自动更新跳转链接。以下是W外链平台活码功能的一些关键特点和使用步骤 &#xff1a; 1.活码的特点&#xff1a…