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

news2024/9/20 9:10:51

文章目录

  • 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 变量的分类
    • 5.强制类型转换

C语言数据类型和变量

1. 数据类型介绍

C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。

  • 使⽤整型类型来描述整数
  • 使⽤字符类型来描述字符
  • 使⽤浮点型类型来描述小数

所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。下⾯盘点⼀下C语⾔提供的各种数据类型,本文主要探讨内置数据类型。

在这里插入图片描述

1.1 字符型

char //character
[signed] 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//或者bool也可以

布尔类型的使⽤得包含头⽂件 布尔类型变量的取值是: true 或者 false .

_Bool flag = true;
if (flag)
 printf("i like C\n");

1.5 各种类型数据长度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不 同,存储的数据范围就有所差异

1.5.1 sizeof操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。 sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

sizeof( 类型 )
sizeof 表达式
  • sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。

  • sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。

  • sizeof 的计算结果是 size_t 类型的,单位是字节

sizeof 运算符的返回值,C语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给 系统⾃⼰去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是 unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long , 对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。 C语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返 回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是 unsigned long long

#include <stdio.h>
int main()
{
 int a = 10;
 printf("%zd\n", sizeof(a));
 printf("%zd\n", sizeof a);//a是变量的名字,可以省略掉sizeof后边的() 
 printf("%zd\n", sizeof(int));
 printf("%zd\n", sizeof(3 + 3.5));
 return 0;
}
1.5.2 数据类型长度
#include <stdio.h>
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;
}

在VS2022X64配置下的输出:

1
1
2
4
4
8
4
8
8
1.5.3 sizeof表达式不计算
//测试:sizeof中表达式不计算 
#include <stdio.h>
int main()
{
 short s = 2;
 int b = 10;
 printf("%d\n", sizeof(s = b+1));
 printf("s = %d\n", s);
 return 0;
}
  • sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了

2. signed和unsigned

  • C语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。

    • signed 关键字,表⽰⼀个类型带有正负号,包含负值;

    • unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。 对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。可以省略不写

  • 整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽ unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。

下⾯的定义是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 //有符号整型的最⼤值
  • unsigned int ⾥⾯的 int 可以省略,所以上⾯的变量声明也可以写成下⾯这样
unsigned a;
  • 字符类型 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、longlong四种,为什么呢?

其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。

如果要查看当前系统上不同数据类型的极限值:

  • 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 :long long的最⼩值和最⼤值。
 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语⾔中把经常变化的值称为变量,不变的值称为常量。

  • 变量创建的语法形式是这样的:

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

变量在创建的时候就给⼀个初始值,就叫初始化。

int age = 18;
char ch = 'w';
double weight = 48.0;
unsigned int height = 100;

4.2 变量的分类

  • 全局变量:在⼤括号外部定义的变量就是全局变量
    • 全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
  • 局部变量:在⼤括号内部定义的变量就是局部变量
    • 局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的

全局变量和局部变量在内存中存储在哪⾥呢?

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区

在这里插入图片描述


5.强制类型转换

在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下

(类型)

请看代码:

int a = 3.14;
//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告

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

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

俗话说,强扭的瓜不甜,我们使⽤强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样⾃然更好的

以上就是C语言类型和变量的基本介绍啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️

请添加图片描述

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

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

相关文章

Redis:快速键值存储的入门指南

一、什么是Redis&#xff1f; Redis&#xff0c;全称为Remote Dictionary Server&#xff0c;是一种开源的、高性能的键值&#xff08;Key-Value&#xff09;存储系统。与传统的关系型数据库不同&#xff0c;Redis将数据主要存储在内存中&#xff0c;因此能够提供极低延迟的数…

网络传输层——UDP与TCP

前言&#xff1a; 1.国际网络体系结构&#xff1a; OSI模型: open system interconnect 理论模型 1977 国际标准化组织 各种不同体系结构的计算机能在世界范围内互联成网。 应用层:要传输的数据信息&#xff0c;如文件传输&#xff0c;电子邮件等…

【C语言】宏定义常量加 ; 的错误

我在使用宏定义常量定义二维数组的时候&#xff0c;编译器报错&#xff1a;应输入“]”&#xff0c;如下&#xff1a; 原因是宏定义不是C语言规定的语句&#xff0c;它的结尾不加 ; 。在上图的 int mine[EASY_ROWS][EASY_COLS]; 中&#xff0c;把 EASY_ROWS 替换为了 9;2; &…

Typora 以 Github 作为图床使用 PicGo 上传图片

本文简练快速介绍如标题所述的操作流程 文章目录 1.前言1.1 图床简述1.2 Github图床的优缺点1.2.1 优点1.2.2 缺点 2.下载PicGo3.Github访问加速4.用github创建图床服务器4.1 注册4.2 创建仓库 4.3 生成TOKEN令牌5.设置PicGo6.设置Typora7.完成 1.前言 1.1 图床简述 图床&…

车载音频记录

一、车载音频总线 2.8车载音频总线A2B Automotive Audio Bus_a2b总线-CSDN博客 传统的车载音频接口采用的是点对点模式&#xff0c;车身数字音频总线采用环型或者菊花链型总线。 A2B&#xff1a;Automotive Audio Bus 支持串联拓扑&#xff0c;即单个主机最多连接10个…

RedHat8安装Oracle19C

RedHat8安装Oracle19C 1、 更新yum源 更新yum源为阿里云镜像源&#xff1a; # 进入源目录 cd /etc/yum.repos.d/ # 删除 redhat 默认源 rm redhat.repo # 下载阿里云的centos7源 curl -O http://mirrors.aliyun.com/repo/Centos-8.repo # 替换 Centos-8.repo 中的 $releasev…

机器学习(二十二):精度和召回率

一、倾斜数据集 倾斜数据集&#xff1a;一个数据集中的正面和负面例子的比例非常不平衡&#xff0c;比如数据集中&#xff0c;结果为1的占比20%&#xff0c;结果为0的占比80% 例子&#xff1a;如果数据集的结果中只有0.5%是1&#xff0c;其余结果是0。有一个模型的预测准确度…

24.7.17数据结构|顺序表

目录 大O的工程意义&#xff1f; 线性表 引入&#xff1a; 主要掌握【代码实现】&#xff1a; 一、线性结构 1、逻辑描述 2、顺序表 1、如何定义结构 1&#xff09;静态顺序表 1&#xff09;动态顺序表 2、写代码 &#xff08;1&#xff09;【clion创建工程】 ​编…

Unity横板动作游戏 - 素材导入和整理

导入素材 编辑器布局 点击每个窗口右上角的三个点可以有更多的窗口选项。 在屏幕的右上角有一个菜单可以保存布局或读取已经报错的布局。 工具按钮 编辑器上的工具按钮在启动的时候是蓝色的&#xff0c;在不启动的时候是灰色的。 这个按钮将会决定场景中的物体是以锚点显示还…

大模型算法面试题(十三)

本系列收纳各种大模型面试题及答案。 1、微调后的模型出现能力劣化&#xff0c;灾难性遗忘是怎么回事 微调后的模型出现能力劣化&#xff0c;灾难性遗忘&#xff08;Catastrophic Forgetting&#xff09;是一个在机器学习领域&#xff0c;尤其是在深度学习和大模型应用中频繁出…

麒麟系统信创改造

麒麟系统信创改造 一、查看操作系统架构下载相应的依赖,压缩包1、查看Linux系统架构、CPU(1)uname -m(2)lscpu(3)cat /proc/cpuinfo(4)arch(5)getconf LONG_BIT(6)dmidecode2、根据Linux系统架构、CPU的差异进行下载相关依赖,看第二项二、以下是根据本系统的aarc…

Golang | Leetcode Golang题解之第297题二叉树的序列化与反序列化

题目&#xff1a; 题解&#xff1a; type Codec struct{}func Constructor() (_ Codec) {return }func (c Codec) serialize(root *TreeNode) string {if root nil {return "X"}left : "(" c.serialize(root.Left) ")"right : "("…

WordPress插件介绍页源码单页Html

源码介绍 WordPress插件介绍页源码单页Html源码&#xff0c;这是一款产品介绍使用页面&#xff0c;也可以用来做其他软件或者应用介绍下载页&#xff0c;界面简约美观&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器…

理解文件系统(上)

模拟实现文件库 创建文件以便理解 自己想实现的文件接口&#xff0c;进行模拟实现 模拟的头文件要准备的头文件 open接口的实现 write接口的实现fflush接口的实现 flose接口的实现 文件实现 stdio.h stdio.c test.c makefile 创建makefile 编译运行 执行后输出log.txt,看…

宏集物联网工控屏网关实现Modbus TCP数据采集并通过TCP转发

前言 在日常的生产活动中&#xff0c;许多企业需要使用底层PLC或传感器数据&#xff0c;但部分企业的终端平台仅支持TCP协议&#xff0c;而不支持常见的PLC或Modbus协议。为了实现兼容性&#xff0c;需要使用协议转换网关&#xff0c;将底层协议转换为TCP协议。 宏集物联网工…

Python客户端操作Elasticsearch

一.Python与Elasticsearch交互示例 这段代码是使用Python的elasticsearch模块与Elasticsearch进行交互的示例&#xff1a; from elasticsearch import Elasticsearch# 一.创建连接 # 建立到Elasticsearch的连接&#xff0c;指定主机和端口&#xff0c;设置请求超时时间为3600…

【数据结构】单链表面试题(Java + 力扣 + 详解)

&#x1f387;&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳&#xff0c;欢迎大佬指点&#xff01; 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…

【日常记录】【插件】Typed.js:用于创建打字效果的 JavaScript 库

文章目录 1. 引言2. 安装3. 基本使用参考链接 1. 引言 Typed.js是一个用于创建打字效果的 JavaScript 库。这个效果就是 chatgpt、百度的文心一言等其他的大模型&#xff0c;回复用户的问题的时候的效果 typed-js 官网typed 案例 2. 安装 CDN方式 这俩都可以&#xff0c;还有其…

17 推荐系统方案中那些不得不知的坑

你好&#xff0c;我是大壮。《易经》中说&#xff1a;“上九&#xff1a;亢龙有悔”。上九是指阳爻在卦中处于最高位&#xff0c;亢龙是指飞向尽头的龙&#xff0c;穷尽至极力终有尽时&#xff0c;力尽则悔&#xff0c;悔不可及。 在前面的 18 讲我们已经讨论了整个推荐算法的…

C语言中的IO控制流

文章目录 一、什么是C语言中的IO控制流二、open函数 1.使用open函数创建文件2.使用使用open函数打开文件三、文件的权限四、文件的描述符五、read函数六、write函数七、lseek函数八、close函数 一、什么是C语言中的IO控制流 在linux系统中一切皆文件&#xff0c;C语言中的IO控…