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.xdnf.cn/news/4844.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA+微信小程序前后端源码 微信OCR识别 识别身份证信息

官方文档:身份证识别 | 微信开放文档 实现效果 : 用的奥巴马的网络图片测试,图片 后端JAVA代码 这里用的若依的后端,前后端分离版的 package com.ruoyi.common.utils;import java.io.File; import java.io.IOException;import org.apache.http.HttpEntity; import org.apac…

SL6605 输入0.8-5.5V 单颗锂电池驱动LED升压恒流限流方案

一、芯片特性 输入电压范围广&#xff1a;SL6605可接受0.8V至5.5V的输入电压&#xff0c;使其能够轻松应对各种锂电池电压波动。升压恒流功能&#xff1a;该芯片具有升压能力&#xff0c;可将低电压输入转换为适合LED驱动的高电压&#xff0c;并保持恒定的输出电流。限流保护&…

ubuntu 安装go和vscode

1 安装Go 打开终端&#xff0c;执行以下命令下载Golang安装包&#xff1a; wget https://golang.org/dl/go1.xx.x.linux-amd64.tar.gz注意&#xff1a;替换命令中的“1.xx.x”为最新版本号&#xff0c;例如&#xff1a;1.23.2. 2. 解压安装包&#xff1a; sudo tar -C /usr/…

[spring源码]spring启动流程

spring启动流程 AnnotationConfigApplicationContext的构造方法 1.父类构造方法&#xff0c;构造一个DefaultListableBeanFactory 在调用AnnotationConfigApplicationContext的构造方法之前&#xff0c;会调用父类GenericApplicationContext的无参构造方法&#xff0c;会构造…

Kafka自动生产消息软件(自动化测试Kafka)

点击下载《Kafka服务端(含Zookeeper)一键自启软件》 点击下载《kafka客户端生产者消费者kafka可视化工具&#xff08;可生产和消费消息&#xff09;》 点击下载《Kafka自动生产消息软件》 1. 前言 在软件开发过程中&#xff0c;Kafka常被用作消息队列来处理特定的业务功能。为…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…

F28379D DAC 寄存器的值千万不要设置成4096啦!

在之前的博客中&#xff0c;更新了如何 使用F28379D的片内DAC&#xff0c;提到DAC为12位的 DAC&#xff0c;因此DAC可以将参考电压分为4096份。不注意的小伙伴可能会将 对应的寄存器的值设置为4096&#xff0c;这样会导致DSP运行至_error_然后停止的哦&#xff0c;如果正在做功…

中研在线教育:开启知识新征程,拓展世界新视野

在当今竞争激烈、知识驱动的时代&#xff0c;教育领域不断涌现出创新型的平台&#xff0c;而中研在线教育无疑是其中一颗璀璨的明星。作为专注于中国研究生知识的在线平台&#xff0c;中研在线教育以其丰富的业务、积极向上的企业价值观和极具感染力的口号&#xff0c;为广大学…

PyQt5实战——多脚本集合包,程序入口QMainWindow(三)

个人博客&#xff1a;苏三有春的博客 系列往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt程序入口&#xff08;QMainWindow&…

A018基于Spring Boot的民宿租赁系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

中酱:重新定义“健康三境“

王国维在《人间词话》中提出过人生的三重境界。 “昨夜西风凋碧树。独上高楼&#xff0c;望尽天涯路。”此为第一境界 说的是人的立志之境&#xff1a;直面迷茫&#xff0c;内心坚定不移&#xff0c;明确自己追求的方向。 “衣带渐宽终不悔&#xff0c;为伊消得人憔悴。”此为…

基于ESP32的桌面小屏幕实战[2]:硬件设计之充电管理

1. 硬件基础知识 1.1 原理图设计、PCB设计、PCB&#xff08;电路板&#xff09;、PCBA&#xff08;电路板元器件&#xff09;分别长什么样&#xff1f; 1.2 高低电平 一般可以理解为输出电压VCC就是高电平&#xff0c;输出电压GND&#xff08;一般是0V&#xff09;就是低电平…

有代码VISTA: Visual-Textual Knowledge Graph Representation Learning

摘要 知识图用实体和关系组成的三元组来表示人类的知识。虽然现有的知识图嵌入方法大多只考虑知识图的结构&#xff0c;但最近提出的一些多模态方法利用知识图中实体的图像或文本描述。在本文中&#xff0c;我们提出了视觉文本知识图&#xff08;VTKGs&#xff09;&#xff0c…

C语言 | Leetcode C语言题解之第523题连续的子数组和

题目&#xff1a; 题解&#xff1a; struct HashTable {int key, val;UT_hash_handle hh; };bool checkSubarraySum(int* nums, int numsSize, int k) {int m numsSize;if (m < 2) {return false;}struct HashTable* hashTable NULL;struct HashTable* tmp malloc(sizeo…

Kimi的论文语言润色技巧:38个提示词让你的写作更专业

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作中&#xff0c;语言的精准与流畅性是衡量论文质量的重要标准。Kimi作为一款先进的AI助手&#xff0c;为论文润色提供了全新的解决方案。本文将分享38个实用的Kimi提示词&…

如何利用大规模外链爆发提升SEO效果?

如果你的网站需要在短时间内实现大幅度流量增长&#xff0c;那么GMB外链无疑是最具爆发力的外链策略之一。这种外链策略通过大规模的外链发布&#xff0c;能够在短期内迅速推动网站的数据收录&#xff0c;并带来显著的SEO效果。 GMB外链的最大特点在于其数量的爆发性。一次群发…

去除人声的利器:消音伴奏软件合集

消音伴奏软件可以指专业的音频编辑软件&#xff0c;也可以指近几年出现的很多消音提伴奏的AI工具。这类软件的主要作用就是帮我们去除歌曲或者视频中的人声&#xff0c;从而提取出纯净的伴奏或者背景音乐。目前市面上有哪些知名且好用的消音伴奏软件&#xff1f;我们应该怎样选…

【前端】JavaScript 方法速查大全-对象(二)

&#x1f525; 前言 在现代Web开发中&#xff0c;JavaScript已经成为不可或缺的编程语言。无论是前端开发还是后端服务&#xff0c;JavaScript都扮演着重要角色。为了帮助开发者更高效地使用JavaScript&#xff0c;本文将为您提供一个全面、系统的JavaScript方法参考&#xff…

复习数据库(外键约束)下篇

目录 前言 认识外键 外键的特点 外键的设计方式 多对多 组合主键 一对多/多对一 一对一 外键和外键约束的关系 外键的使用 添加约束 在建表时添加外键约束 如果已经创建表了,那我们可以修改表的方式给表添加外键约束: 应用实例 删除约束 删除/更新行为 含义 …

深入理解 Kafka:分布式消息队列的强大力量

一、引言 在现代分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而 Kafka 作为其中的佼佼者&#xff0c;以其高吞吐量、可扩展性和持久性等特点被广泛应用。无论是处理海量的日志数据、实时的用户交互信息&#xff0c;还是复杂的微服务间通信&#xff0c;Ka…