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

news2024/11/17 2:27:11

前言💞💞

啦啦啦~这里是土土数据结构学习笔记🥳🥳

这里是引用
💥个人主页:大耳朵土土垚的博客
💥 所属专栏:C语言笔记
💥欢迎大家🥳🥳点赞✨收藏💖评论哦~🌹🌹🌹 有问题可以写在评论区或者私信我哦~

1. 数据类型介绍

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

使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
在这里插入图片描述

下面我们主要介绍C语言内置类型。

1.1字符型

char
[signed] char
unsigned char

signed unsigned指的是有符号与无符号,有符号有正负之分,下文将介绍

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>
布尔类型变量的取值是:true或者false.

#define bool _Bool
#define false 0
#define true 1

举个栗子,代码如下:

#include<stdbool.h>
#include<stdio.h>
int main()
{
	_Bool flag = true;

	if (flag)
		printf("i like C\n");
	return 0;
}

运行结果如下:
在这里插入图片描述
✨✨如果没有包含头文件:

#include<stdbool.h>

就会出现下面的结果
在这里插入图片描述

1.5 各种数据类型的长度

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

💖💖那我们应该怎么求各种数据类型的长度呢?

可以借助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;
}

结果如下:
在这里插入图片描述

#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配置下的输出:
在这里插入图片描述

💥💥我们要注意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 。
由于这是默认情况,关键字 signed ⼀般都省略不写,但是写了也不算错。

signed int a;
// 等同于int a;

整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽ unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。

这是因为16位有符号的第一位表示符号位,0表示+(正),1表示-(负),所以相较于无符号少了一位自然表示范围也就较小

3. 数据类型的取值范围

如果要查看当前系统上不同数据类型的极限值:
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 变量的分类

全局变量:在⼤括号外部定义的变量就是全局变量全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。

局部变量:在⼤括号内部定义的变量就是局部变量局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。

#include <stdio.h>
int global = 2023;//全局变量
int main()
{
 int local = 2018;//局部变量
 printf("%d\n", local);
 printf("%d\n", global);
 return 0;
}

思考:如果局部和全局变量,名字相同呢?

#include <stdio.h>
int n = 1000;
int main()
{
 int n = 10;
 printf("%d\n", n);//打印的结果是多少呢?
 return 0;
}

大家可以在心里想一想答案

🥳🥳答案揭晓:

在这里插入图片描述

其实当局部变量和全局变量同名的时候,局部变量优先使⽤。

5.结语

以上就是C语言内置数据类型和变量的介绍啦~,大家都学废了吗💖💖完结撒花 ~🥳🥳有问题可以打在评论区或私信土土哦 ~

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

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

相关文章

【Node.js从基础到高级运用】二、搭建开发环境

Node.js入门&#xff1a;搭建开发环境 在上一篇文章中&#xff0c;我们介绍了Node.js的基础概念。现在&#xff0c;我们将进入一个更实际的阶段——搭建Node.js的开发环境。这是每个Node.js开发者旅程中的第一步。接下来&#xff0c;我们将详细讨论如何安装Node.js和npm&#…

将python编写的网站制作成docker镜像并上传到Github Packages上

文章目录 前言Docker安装docker注意事项 创建Dockerfile注意事项 构建 Docker 镜像运行 Docker 镜像 发布到Github Packages坑坑到位申请token的坑docker登录的坑给镜像添加标签的坑docker推送的坑 在Github Packages上查看总结 前言 还记得上一篇《借助ChatGPT使用Python搭建…

借助Aspose.html控件,在 Java 中将 URL 转换为 PDF

如果您正在寻找一种将实时 URL 中的网页另存为 PDF文档的方法&#xff0c;那么您来对地方了。在这篇博文中&#xff0c;我们将学习如何使用 Java 将 URL 转换为 PDF。从实时 URL转换HTML网页可以像任何其他文档一样保存所需的网页以供离线访问。将网页保存为 PDF 格式可以轻松突…

PandasAI—让AI做数据分析

安装 pip install pandasai !pip install --upgrade pandas pandasai 导入依赖项 import pandas as pdfrom pandasai import PandasAIfrom pandasai.llm.openai import OpenAI使用pandas创建一个数据框 df pd.DataFrame({"country": ["United States",…

MKS Type 631C 真空计说明详细内容查看图中目录

MKS Type 631C 真空计说明详细内容查看图中目录

【sw网络监控】通过snmp协议相关的snmp-exporter(收集交换机网络监控数据)+ promethus + grafana

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

C++异常处理机制

目录 一&#xff0c;传统C语言处理异常 二&#xff0c;C异常概念 三&#xff0c;使用 1. 自定义异常体系 2. 在函数调用链中异常栈展开匹配原则 3. 异常的重新抛出 四&#xff0c;异常规范 五&#xff0c;异常安全 六&#xff0c;C标准库的异常体系 七&#xff0c;异…

【开源】JAVA+Vue.js实现高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…

liteIDE 解决go root报错 go: cannot find GOROOT directory: c:\go

liteIDE环境配置 我使用的liteIDE为 x36 5.9.5版本 。在查看–>选项 中可以看到 LiteEnv&#xff0c;双击LiteEnv &#xff0c;在右侧选择对应系统的env文件&#xff0c;我的是win64系统&#xff0c;所以文件名为win64.env 再双击 win64.env &#xff0c;关闭当前窗口&…

python淘宝网页爬虫数据保存到 csv和mysql(selenium)

数据库连接设置&#xff08;表和字段要提前在数据库中建好&#xff09; # 数据库中要插入的表 MYSQL_TABLE goods# MySQL 数据库连接配置,根据自己的本地数据库修改 db_config {host: localhost,port: 3306,user: root,password: ma*****6,database: may2024,charset: utf8mb…

TCP包头、TCP为什么安全可靠、UDP和TCP的区别、http协议

我要成为嵌入式高手之3月8日Linux高编第十八天&#xff01;&#xff01; __________________________________________________ 学习笔记 TPC包头 1、序号 发送端发送数据包的编号 2、确认号 已经确认接收到的数据的编号&#xff0c;只有当ACK为1时&#xff0c;该位才有用 …

简介maven核心:pom项目对象模型

Maven Maven 意思是知识的积累者&#xff0c;最初是为了简化 Jakarta Turbine 项目中的构建过程。有几个项目&#xff0c;每个项目都有自己的 Ant 构建文件&#xff0c;它们都略有不同。JAR 被检入 CVS。我们想要一种标准的方式来构建项目&#xff0c;清楚地定义项目的组成&am…

Jmeter 测试使用基本组件结构

JMeter简介 Apache组织开发的开源免费压测工具纯Java程序&#xff0c;跨平台性强源程序可以从网上下载高扩展性可对服务器、网络或对象模拟巨大的负载&#xff0c;进行压力测试可以用于接口测试支持分布式、多节点部署 JMeter安装 下载位置 官网https://jmeter.apache.org/ …

基于单片机的灭火机器人设计

目 录 摘 要 I Abstract II 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 灭火机器人系统工作原理 4 2 系统硬件设计 6 2.1 单片机 6 2.2 火焰探测系统设计 8 2.3 灭火系统设计 8 2.4 循迹模块设计 9 2.5 电机驱动模块 10 3 系统软件设计 12 3.1 系统软件开发环境 12 3.2 系统…

防御保护 IPSEC VPPN实验

实验背景&#xff1a;FW1和FW2是双机热备 主备备份模式。 实验要求&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置&#xff08;由于是双机热备状态&#xff0c;所以FW1和FW2只需要配置FW1主设…

STM32标准库——(20)WDG看门狗

1.WDG简介 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动&#xff0c;即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动&#xff0c;通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作 2.IWDG框图 它的结构和定时器是非常相似的&#xf…

打印机项目需求

打印机项目需求 工作情况如下 我拿着一张带有二维码的纸张对准“打印机的摄像头”“打印机的摄像头”解析我的二维码假如解析后的二维码内容是&#xff1a;24030924发送一个http请求&#xff1a;https://…/getMessage?code24030924外部服务器会返回一个json数据{‘地址’:‘…

Python编程实验六:面向对象应用

目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 四、实验结果分析与体会 一、实验目的与要求 &#xff08;1&#xff09;通过本次实验&#xff0c;学生应掌握类的定义与对象的创建、类的继承与方法的覆盖&#xff1b; &#xff08;2…

高级语言讲义2016计专(仅高级语言部分)

1.斐波那契序列的第n项可以表示成以下形式&#xff0c;编写一个非递归函数&#xff0c;返回该数列的第n项的数值 #include <stdio.h>int func(int n) {if(n1||n2)return 1;int p1,q1,num;for(int i3; i<n; i) {numpq;qp;pnum;}return num; } 2.在MXN的二维数组A中&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LoadingProgress)

用于显示加载动效的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 LoadingProgress() 创建加载进展组件。 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使…