【C语言】--数据类型和变量

😗个人主页: 起名字真南
😙个人专栏:【数据结构初阶】 【C语言】

请添加图片描述

目录

  • 1 数据类型介绍
    • 1.1 字符型
    • 1.2 整形
    • 1.3 浮点型
    • 1.4 布尔型
    • 1.5 各种数据类型的长度
      • 1.5.1 sizeof 操作符
      • 1.5.2 数据类型长度
      • 1.5.3 sizeof 中表达式不计算
  • 2 signed 和 unsigned
  • 3 数据类型的取值范围
  • 4 变量
    • 4.1 变量的创建
    • 4.2 变量的分类

1 数据类型介绍

C语言提供了丰富的数据类型来描述我们写代码的各种数据。
使用整形来描述整数,使用字符类型来描述字符,使用浮点型来描述小数。
而所谓的类型就是相似的数据所拥有的共同的特征,编译器只有知道了数据的类型,才知道怎么进行操作和分配内存(数据类型不一样所占用的内存空间大小也不一样。

下面给大家介绍一下C语言提供的各种数据类型,主要讨论内置类型 :
在这里插入图片描述

1.1 字符型

	char;          //charactersigned char;   //有符号unsigned char; //无符号

1.2 整形

	// 短整形short int;signed short int;unsigned short int;//整形int;signed int;unsigned int;//长整形long int;signed long int;unsigned long int;//更长的整形//C99中引入long long int;signed long long int;unsigned long long int;

1.3 浮点型

	//浮点型float;double;long double;

1.4 布尔型

C语言中原来并没有为布尔单独设置一个类型,而是使用整数“ 0 ”代表假。非零值代表真。
C99中引入了布尔型,用来专门表示真假。

//布尔型
_Bool;

在使用布尔类型需要包含头文件 <stdbool.h>
布尔类型变量的取值为TrueFalse

1.5 各种数据类型的长度

每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储数据的范围就有所不同

1.5.1 sizeof 操作符

sizeof 是一个关键字,也是操作符,专门用来计算sizeof的操作符数的类型长度的,单位是字节
sizeof 操作符的操作数可以是数据类型,也可以是变量和表达式

sizeof(类型)
sizeof 表达式

sizeof 的操作数如果不是类型是表达式的情况可以省略后面的括号。
sizeof 后面的表达式是不参与运算的,根据表达式的类型来得出大小。
sizeof 的计算结果都是 size_t 类型。
注意sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型而是留给系统自己去决定,可能的类型有 unsigned int,unsigned long,unsigned long long。而对应的printf()的占位符分别是 %u,%lu, %llu。这样不利于程序的可移植性
C语言提供了一个解决办法,创建了一个 size_t 类型用来统一表示sizeof 的返回值,可能是三个中的任意一个

例如:

int main()
{int a = 100;printf("%zd\n", sizeof(a));printf("%zd\n", sizeof a);printf("%zd\n", sizeof(int));printf("%zd\n", sizeof(1+1));return 0;
}

输出结果:
在这里插入图片描述
从结果中我们可以看到都是4字节,这是因为sizeof在这里计算的全部是int这个数据类型的大小,而a是变量名。可以省略括号,最后的1+1返回的是最后结果的大小是整形4个字节。

1.5.2 数据类型长度

int main()
{printf("%zd\n", sizeof(char));printf("%zd\n", sizeof(_Bool));printf("%zd\n", sizeof(short));printf("%zd\n", sizeof(int));printf("%zd\n", sizeof(long));printf("%zd\n", sizeof(long long));printf("%zd\n", sizeof(float));printf("%zd\n", sizeof(double));printf("%zd\n", sizeof(long double));return 0;
}

在VS 2022 X64的环境下输出如下:
在这里插入图片描述

1.5.3 sizeof 中表达式不计算

代码:

int main()
{int a = 2;printf("%zd\n", sizeof(a));printf("%zd\n", sizeof(a = 100 +11 ));printf("%d\n", a);return 0;
}

输出结果:
在这里插入图片描述
sizeof 在代码进行编译的时候,就已经根据表达式的类型确定了,而表达式的执行却要在程序运行期间才能执行,f在编译期间已经将sizeof处理掉了,所以在运行期间不会在执行表达式了。

2 signed 和 unsigned

C语言使用 signedunsigned 关键字是用来修饰字符和整形类型的。

signed关键字,表示一个类型带有正负号,包含负值;
unsigned关键字,表示一个类型只有正整数和零。
对于 int 类型是默认带有正负号的,也就是说 int 等同于 signed int
整数变量声明为 unsigned 的好处是,同样长度的内存能够表示的最大正整数提高了一倍,比如16位的 signed short int 的取值范围是:-32768 ~ 32767而 unsigned short int 的取值范围是:0 ~ 65535。32位的signed下面的定义是VS2022环境中的,limits.h中的相关定义。

#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值

字符类型char也可以设置 signed 和 unsigned。

signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

注意,C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。 这就是说,char 不等同于 signed char ,它有可能是 signed char ,也有可能是 unsigned char 。这⼀点与 int 不同, int 就是等同于 signed int 。

3 数据类型的取值范围

上述的数据类型有很多,尤其整数的数据类型就有 short、 int、 long、 long long,四种,为什么呢?

其实每一种数据类型都有自己的取值范围,也就是存储数值的最大值和最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择合适的类型。如果要查看当前系统上不同数据类型的极限值:
limits.h 文件中说明了整数类型的取值范围。
float.h 文件中说明了浮点类型的取值范围。
为了代码的可移植性,需要知道某种整数的类型的极限值时应该尽量使用这些常量。

  • SCHAR_MIN , SCHAR_MAX : signed char 的最小值和最大值
  • SHRT_MIN , SHRT_MAX : short的最小值和最大值
  • INT_MIN , INT_MAX : int的最小值和最大值
  • LONG_MIN , LONG_MAX : long的最小值和最大值
  • LLONG_MIN , LLONG_MAX : llong的最小值和最大值
  • UCHAR_MAX : unsigned char 的最大值
  • USHRT_MAX : unsigned short 的最大值
  • UINT_MAX ; unsigned int 的最大值
  • ULONG_MAX : unsigned long 的最大值
  • ULLONG_MAX : unsigned long long 的最大值

4 变量

4.1 变量的创建

了解清楚了类型,那么类型是用来做什么的呢?类型时用来创建变量的。什么是变量呢?C语言中常把变化的量叫做变量,不变的值叫做常量

变量创建的语法是这样的
在这里插入图片描述

int main()
{int long;       //整形变量char ch;        //字符型变量double weight;  //浮点型变量return 0;
}

变量在创建的时候给一个初始值叫做初始化

int main()
{int age = 20;                    //整形变量char ch[10] = "zhen nan";        //字符串char c = 'a';                    //字符double weight = 72.5;            //浮点型变量return 0;
}

4.2 变量的分类

全局变量 :在大括号外部定义的变量就是全局变量
全局变量的使用范围比较广,可以在整个工程中使用。
局部变量 :在大括号内部定义的变量就是局部变量
局部变量的使用范围比较局限,只能在自己的局部范围内使用。

int global = 100;  //全局变量int main()
{int local = 10;  //局部变量printf("%d\n", global);printf("%d\n", local);return 0;
}

输出结果:
在这里插入图片描述
如果局部变量和全局变量名字一样呢?

int global = 100;  //全局变量int main()
{int global = 10;  //局部变量printf("%d\n", global);return 0;
}

输出结果:
在这里插入图片描述
在这里我们可以看到如果名称一致的情况下优先使用局部变量。

全局变量和局部变量在内存中存储在哪里呢
一般我们在学习C/C++的时候会关注三个区域:堆区栈区静态区

  1. 局部变量是存在内存的栈区
  2. 全局变量存放在内存的静态区
  3. 堆区是用来进行动态内存管理的 (后期会介绍)
    在这里插入图片描述

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

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

相关文章

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发 &#xff09;&#xff0c;系统具有完整的源代码和…

“Hello, World!“ 历史由来

布莱恩W.克尼汉&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多&#xff0c;他在普林斯顿大学取得了电气工程的博士学位&#xff0c;2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

Windows server 2016.2019 .NET Framework 3.5安装包、安装步骤

windows server2019 操作系统 安装 sqlserver2008时提示缺少 .NET Frameword 3.5&#xff0c; 在功能里选择 .NET Frameword 3.5安装报错&#xff0c; 下载安装包&#xff0c;下载地址 https://download.csdn.net/download/qq445829096/89450429这里指定备份源路径 安装包解…

OpenGL3.3_C++_Windows(22)

材质&#xff1a; 决定物体在渲染过程中最终视觉呈现的关键因素之一&#xff0c;它通过一系列光学&#xff08;投光物&#xff09;和物理参数&#xff08;反光度&#xff0c;反照率、金属度&#xff0c;折射率……&#xff09;准确模拟现实世界中的材料特性&#xff0c;从而增…

【MySQL】InnoDB的存储结构

InnoDB的存储结构&#xff1a;每个表都会生成一个表空间文件&#xff0c;这个文件里面最小结构就是行&#xff0c;存储的真正的数据&#xff0c;一个页来管理若干行&#xff0c;一个区来管理若干页&#xff0c;一个区组来管理若干区。段并不是真正的物理存储结构&#xff0c;它…

汇总大语言模型LLM的评测基准数据集(BenchMarks)

文章目录 0. 引言1. 知识与语言理解1.1 MMLU1.2 ARC1.3 GLUE1.4 Natural Questions1.5 LAMBADA1.5 HellaSwag1.6 MultiNLI1.7 SuperGLUE1.8 TriviaQA1.9 WinoGrande1.10 SciQ 2. 推理能力2.1 GSM8K2.2 DROP2.3 CRASS2.4 RACE2.5 BBH2.6 AGIEval2.7 BoolQ 3. 多轮开放式对话3.1 …

vue3中获取Excel和csv文件中的内容

1.效果 2.安装 npm install xlsxyarn add xlsx 3.引入使用 <el-upload ref"uploadRef" :on-change"changeFile" :show-file-list"false" class"mr10" accept".csv, .xlsx, .xls"action"#" :auto-upload&quo…

滚动表格(vue版本)【已验证可正常运行】

演示图 注&#xff1a;以下代码来自于GPT4o&#xff1a;国内官方直连GPT4o 代码 <template><div><div class"alarmList-child" ref"alarmList" mouseenter.stop"autoRoll(1)" mouseleave.stop"autoRoll()"><div…

基于DPU的Ceph存储解决方案

1. 方案背景和挑战 Ceph是一个高度可扩展、高性能的开源分布式存储系统&#xff0c;设计用于提供优秀的对象存储、块存储和文件存储服务。它的几个核心特点是&#xff1a; 弹性扩展&#xff1a;Ceph能够无缝地水平扩展存储容量和性能&#xff0c;只需添加新的存储节点即可&am…

【AUTOSAR 基础软件】DEM模块详解(诊断故障管理)

文章包含了AUTOSAR基础软件&#xff08;BSW&#xff09;中DEM模块相关的内容详解。本文从ISO标准&#xff0c;AUTOSAR规范解析&#xff0c;ISOLAR-AB配置以及模块相关代码分析四个维度来帮读者清晰的认识和了解DEM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都…

查询DBA_TEMP_FILES报错,删除临时表空间报错ORA-60100

SYMPTOMS 查询DBA_TEMP_FILES报错如下图 ORA-01157: cannotidentify/ock data fle 201 -see DBWR trace fle ORA-01110: data fle 20 1: D:APPADMINISTRATORIORADATA MARTIDATAFILE 01157,00000-"cannotidentify/ock data fle %s -see DBWR trace fle"*Cause: The b…

2024年湖北省安全员-C证证考试题库及湖北省安全员-C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年湖北省安全员-C证证考试题库及湖北省安全员-C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试…

云计算:重塑数字时代的基石

目录 一、引言 二、云计算的定义与特点 三、云计算的发展历程 四、云计算的应用场景 五、云计算面临的挑战 六、云计算的未来发展趋势 七、结语 一、引言 随着信息技术的飞速发展&#xff0c;云计算已经逐渐渗透到我们生活的方方面面。从个人用户的在线存储、在线办公&…

应用案例 | 如何监测高价值货物在物流运输过程中受到的振动和冲击?全面保障货物安全

一、货物运输 不同种类的货物对运输的要求不同&#xff0c;钢铁、煤炭、矿石等大宗物资通常对运输要求较低&#xff0c;而电子产品、IT 产品、家电等高价值敏感类货物则更强调运输的安全性和时效性&#xff0c;往往希望能尽可能安全和快速送达这类货物&#xff0c;使之尽快进入…

laravel对接百度智能云 实现智能机器人

创建API Key和 Secret Key进入网址&#xff1a;百度智能云千帆大模型平台 如下图操作&#xff1a; 填写完毕点击确认后&#xff0c;即可得到sk和ak 后端接口实现代码&#xff1a; //调用百度智能云第三方机器人接口public function run($text) {$curl curl_init();curl_setop…

阿一网络安全培训中心专门为你准备了一份WScan使用教程

下载地址&#xff1a;https://github.com/chushuai/wscan/releases 版本的选择 Windows就选windows_amd64 Linux就选linux_amd64 mac就选darwin_amd64 下载好后&#xff0c;运行一次exe会生成一个config.yaml文件 把该文件中plugins下面的所有插件的enabled设置为True。&…

数据库使用笔记

1.mysql数据库频繁访问导致连接超时 解决办法一&#xff1a; 优化查询&#xff1a;检查并优化SQL查询语句&#xff0c;减少不必要的数据库调用。增加连接池大小&#xff1a;如果应用程序使用连接池&#xff0c;可以考虑增加连接池的最大连接数。&#xff08;注&#xff1a;不能…

Nginx网站服务详解(设置并发数、实现不同虚拟主机等)

一、nginx的最大并发数设置已经状态收集模块 [root192 nginx]# cat nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/user ngin…

单源最短路径问题(Dijstra)

#include<iostream> using namespace std; #define MAX 500 #define INT 999 typedef struct {char vex[MAX];int Edge[MAX][MAX];int vexnum,arcnum; }MGraph; void InitMG(MGraph &MG) {cout<<"输入顶点数和边数&#xff1a;";cin>>MG.vexnu…

SOBEL图像边缘检测器的设计

本项目使用FPGA设计出SOBEL图像边缘检测器&#xff0c;通过分析项目在使用过程中的工作原理和相关软硬件设计进行分析详细介绍SOBEL图像边缘检测器的设计。 资料获取可联系wechat 号&#xff1a;comprehensivable 边缘可定义为图像中灰度发生急剧变化的区域边界,它是图像最基本…