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,一经查实,立即删除!

相关文章

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

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

Synchronized 的几种用法解析

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

rhce作业4

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

在数据抓取的时候,短效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;美化内容&#…

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;判断文本中是否含有这个敏感词。 …

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

发送屏幕内容 代码详解 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…

【论文复现】基于图卷积网络的轻量化推荐模型

本文所涉及所有资源均在这里可获取。 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐、摄影的一位博主。 &#x1f4d7;本文收录于论文复现系列&#xff0c;大家有兴趣的可以看一看…

QT 实现绘制汽车仪表盘

1.界面实现效果 以下是具体的项目需要用到的效果展示,通常需要使用QPainter类来绘制各种图形和文本,包括一个圆形的仪表盘、刻度、指针和数字。 2.简介 分为以下几个部分,首先设置抗锯齿 painter.setRenderHint(QPainter::Antialiasing)。 QPainter p(this);p.setRender…

2020年美国总统大选数据分析与模型预测

数据集取自&#xff1a;2020年&#x1f1fa;&#x1f1f8;&#x1f1fa;&#x1f1f8;美国大选数据集 - Heywhale.com 前言 对2020年美国总统大选数据的深入分析&#xff0c;提供各州和县层面的投票情况及选民行为的可视化展示。数据预处理阶段将涉及对异常值的处理&#xff0…

sqlserver使用bak文件恢复数据库

进入数据库 sqlcmd -S localhost -U SA -P password备份文件 #备份格式BACKUP DATABASE your_database_name TO DISK path_to_backup_file.bak;#举例 1> BACKUP DATABASE XJZDataTest TO DISK /root/mssql.bak; 2> go使用备份文件恢复数据库 1、查询备份文件中的数据…

拥有一个智能化清理电脑垃圾的工具 是一个非常明智的选择 效率高安全删除文件

拥有一个智能化清理电脑垃圾的工具 是一个非常明智的选择 效率高&安全删除文件。大家以前清理电脑垃圾是不是都是只删除回收站垃圾&#xff0c;或者有些人更聪明一点就会删除临时文件&#xff0c;仅仅清理这些垃圾是不够的&#xff0c;C盘其实还有更多的垃圾需要清理。 太…