5.C语言基础入门:数据类型、变量声明与创建详解

C语言基础入门:数据类型、变量声明与创建详解

C语言往期系列文章目录

往期回顾:

  1. C语言是什么?编程界的‘常青树’,它的辉煌你不可不知
  2. VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦
  3. C语言入门:解锁基础概念,动手实现首个C程序
  4. C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏

文章目录

  • C语言基础入门:数据类型、变量声明与创建详解
  • C语言往期系列文章目录
  • 前言回顾
  • 一、数据类型
    • 1.1 数据类型介绍
    • 1.2 内置类型和自定义类型
      • 1.2.1 字符类型
      • 1.2.2 整型类型
      • 1.2.3 浮点型类型
      • 1.2.4 布尔类型
    • 1.3 signed 和 unsigned
    • 1.4 数据类型的取值范围
  • 二、变量
    • 2.1 变量的创建
    • 2.2 变量的初始化
    • 2.3 变量的分类
    • 2.4 全局变量和局部变量的存储位置
  • 总结


前言回顾

C语言,经典且强大,广泛应用于各领域,稳居语言排行榜前列。作为编译型语言,C语言需编译器将源码转为可执行文件,VS 2022是我们的首选工具。在C语言之旅中,我们首先构建了程序基础框架,包括项目、源文件和头文件。main函数作为程序入口,是编程的起点。随后,我们学习了printf函数,它功能强大,便于控制台文本输出。同时,初步了解了C语言的关键字和库函数。
在字符处理上,我们探讨了ASCII编码,每个字符都有独特的二进制表示。字符串由字符组成,用双引号括起。此外,还学习了转义字符,它们能表示一些特殊含义的字符。接下来的博客将深入C语言的变量、数据类型和操作符等内容,一起来踏上充满挑战的C语言学习之旅吧。

本期相关文章:
C语言中的常量变量,数据类型,操作符
本期内容:
在这里插入图片描述


一、数据类型

1.1 数据类型介绍

在我们日常生活中,信息无处不在,它们以各种各样的形式存在。比如,当我们去超市购物时,商品的价格通常以数字形式展示,如“苹果每斤5元”;而当我们查看天气预报时,温度则可能以“25℃”这样的数字加单位的组合形式出现。此外,我们还会遇到如“红色苹果”、“绿色蔬菜”这样的描述,它们通过文字或颜色来传达信息。

C语⾔提供了丰富的数据类型来描述生活中的各种数据。数据类型是编程语言中用于定义变量存储数据的方式和范围的重要概念。在C语言中,数据类型不仅决定了变量可以存储哪些值,还影响了这些值在程序中的运算方式和结果。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只
有知道了数据的类型,才知道怎么操作数据。

1.2 内置类型和自定义类型

C语言使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。
我们将数据类型分为,内置数据类型自定义数据类型

在这里插入图片描述

1.2.1 字符类型

以超市购物为例,商品的价格“5元”在C语言中可以被定义为一个整型(int)或浮点型(float/double)变量,具体取决于是否需要表示小数点后的数值。而“红色苹果”中的“红色”则可以被定义为一个字符型(char)或字符串型(string)变量,用于存储颜色信息。
在C语言中提供了三种字符类型,当我们在代码中看到char—它就代表字符,signed 是有符号的,unsigned 是无符号的。

char //字符类型
[signed] char //有符号的字符类型
unsigned char//无符号的字符类型

1.2.2 整型类型

在C语言中,整型类型用于存储整数,根据存储大小和范围的不同,C语言标准定义了多种整型类型,整型类型又分为四种,它们分别是短整型,整型,长整型,更长的整型。
如图所示:
在这里插入图片描述
long long int 是C99引入的,它可以用来表示更大的数值范围。

1.2.3 浮点型类型

在C语言中,浮点型类型用于存储小数数值,它主要包括以下三种类型:

float //单精度浮点型
double //双精度浮点型
long double	//精度更高的双精度浮点型

那它为什么叫浮点型呢?这是小数点是可以浮动的。比如 3.14 ,我们可以写成0.314*10,也可以写成31.4 * 1 0 − 1 10^{-1} 101

1.2.4 布尔类型

布尔类型(Boolean type)是C语言后来才引入的一种数据类型,用于明确地表示真(true)或 假(false)的值。然而,在布尔类型被正式引入之前,C语言已经方式来表示真假。
在C语言的早期版本中,以及在一些仍然使用旧式C代码的场景中,真假通常是通过整数来表示的。

  • 0 被用作假(false)的表示。
  • 非0值(通常是1,但也可以是其他任何非零整数)被用作真(true)的表示。

我们可以看这个stdbool库的介绍,cstdbool.h。也可以看具体的头文件声明。

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

实际上呢,false 和 true 在vs中的代表仍然是0和1来表示真和假的关系。所以我们在使用bool的时候要包括头文件。
使用如下:

#include<stdbool.h>
#include<stdio.h>int main()
{_Bool flag = false;if (flag)printf("flag is true\n");if (flag == false)printf("flag is false\n");return 0;
}

1.3 signed 和 unsigned

C语言使用 signed 和 unsigned 关键字修饰字符型和整型类型的。

signed 关键字,表示⼀个类型带有正负号,包含负值;
unsigned 关键字,表示该类型不带有正负号,只能表示零和正整数。

设想一下,在超市购物时,你可能会遇到两种不同的情况:一种是你的账户余额,它可能有正有负(比如存入或支出);另一种是你购买的商品数量,它只可能是正数或零(因为你不能购买负数件商品)。

#include <stdio.h>  int main() 
{  // 账户余额,可能为正也可能为负  signed int balance = 100; // 初始存款100元  balance -= 50; // 支出50元  if (balance < 0) {  printf("账户余额不足!\n");  } else {  printf("账户余额:%d元\n", balance);  }  // 商品数量,只能为非负数  unsigned int ItemCount = 5; // 购买了5件商品  ItemCount++; // 再增加1件商品  printf("购买商品数量:%u件\n", ItemCount);  return 0;  
}

对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。
由于这是默认情况,关键字 signed ⼀般都省略不写,但是写了也不算错。

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

int 类型也可以不带正负号,只表示非负整数。这时就必须使用关键字 unsigned 声明变量。

unsigned int a;
//等同于unsigned a;
//非负整数

所以上述我们表示数据类型的时候,可以省略的地方都加了[],但是有些地方还是不省略的好,让代码简洁美观,易读,是程序员的基本素养。

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

1.4 数据类型的取值范围

有的小伙伴这时候就疑惑了,为什么有这么多signed和unsigned数据类型,它们有什么区别呢?
我们先来通过整型看,取unsigned的好处。
整数变量声明为 unsigned 的好处是,同样长度的内存能够表示的最大整数值,增大了⼀倍。
比如,16位的 signed short int 的取值范围是:-32768 ~ 32767,最大是32767;而 unsigned short int 的取取值范围是:0~65535,最大值增大到了65,535。
32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。
我们也可以通过 VS 2022 直接看头文件的部分。

//整型
#define SHRT_MIN    (-32768)
#define SHRT_MAX      32767
#define USHRT_MAX     0xffff
#define INT_MIN     (-2147483647 - 1)
#define INT_MAX       2147483647
#define UINT_MAX      0xffffffff
#define LONG_MIN    (-2147483647L - 1)
#define LONG_MAX      2147483647L
#define ULONG_MAX     0xffffffffUL
#define LLONG_MAX     9223372036854775807i64
#define LLONG_MIN   (-9223372036854775807i64 - 1)
#define ULLONG_MAX    0xffffffffffffffffui64

其实每⼀种数据类型有自己的取值范围,也就是存储的数值的最大值和最小值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值:

limits.h 头文件中说明整型类型的取值范围。
float.h 头文件中说明浮点型类型的取值范围。

为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使用这些常量。

二、变量

了解清楚了类型,我们使用类型做什么呢?类型是用来创建变量的。
什么是变量呢?C语言中把经常变化的值称为变量,不变的值称为常量
什么叫变量?这是C语言引入的概念,我们生活中有一些值一直是发生变化的,一些是一直没发生变化的。把那些永远不会变化的值叫做常量,那些可能会发生变化的叫变量。常量是用来描述那些不变的量。本期我们不讨论常量,我们讨论变量。

2.1 变量的创建

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

data_type name;
//data_type  --- 数据类型
//name  --- 变量名

当我们想描述一个人的年龄,体重,名字的首字母的时候,就可以创建如下的变量:

int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量

而这就是变量的创建.

2.2 变量的初始化

变量在创建的时候就给⼀个初始值,就叫变量的初始化.
例如:

int age = 10; //整型变量
char ch = 'c'; //字符变量
double weight = '65.1'; //浮点型变量

注意,这里浮点型变量有一个细节点:

在这里插入图片描述
这时候可能会发生截断,也因为这样,我们可以在后面加一个f.

在这里插入图片描述
所以我们可以使用我们刚刚学的数据类型来进行创建变量,这时候用哪种数据类型更合适,就用哪种。

2.3 变量的分类

C语言中的变量分类又分为,全局变量和局部变量.

  • 全局变量:在⼤括号外部定义的变量就是全局变量
    全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。
  • 局部变量:在大括号内部定义的变量就是局部变量
    局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。

通俗一点说,在大括号外部的变量是全局变量。什么叫全局变量呢?我们举例来说:

int global_val = 10;//全局变量
int main()
{int a = 6;{int b = 10;printf("b = %d\n", b);printf("global_val = %d\n", global_val);}printf("global_val = %d\n", global_val);return 0;
}

咱们发现前面一个global_val可以打印,后面一个global_val也可以打印。而如果我们想按同样的方式去打印b变量,就会发现问题。

在这里插入图片描述
所以b是一个局部变量,只能在a的括号内发生作用。
那如果全局变量和局部变量同名呢?

int main()
{int a = 6;{int a = 10;printf("a = %d\n", a);}printf("a = %d\n", a);return 0;
}

这时候会发现,局部变量会优先使用,出了局部,就会使用全局变量。

2.4 全局变量和局部变量的存储位置

⼀般我们在学习C/C++语⾔的时候,我们会关注内存中的三个区域:栈区、堆区、静态区

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

总结

数据类型和变量只是我们踏入C语言世界的初步探索,未来的学习之路还很长。只要保持不急不躁的心态,坚持不懈地努力,我们就一定能够掌握更多知识,成为强大的C语言编程者。

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

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

相关文章

Github优质项目推荐 - 第六期

文章目录 Github优质项目推荐 - 第六期一、【WiFiAnalyzer】&#xff0c;3.4k stars - WiFi 网络分析工具二、【penpot】&#xff0c;33k stars - UI 设计与原型制作平台三、【Inpaint-Anything】&#xff0c;6.4k stars - 修复图像、视频和3D 场景中的任何内容四、【Malware-P…

小程序项目实践(一)--项目的初始化以及前期的准备工作

目录 1.起步 1.1 uni-app 简介 1.2 开发工具 1.2.1 下载 HBuilderX 1.2.2 安装 HBuilderX 1.2.3 安装 scss/sass 编译 1.2.4 快捷键方案切换 1.2.5 修改编辑器的基本设置 1.3 新建 uni-app 项目 1.4 目录结构 1.5 把项目运行到微信开发者工具 1.6 使用 Git 管理项目 …

leetcode hot100_part3_滑动窗口

滑动窗口是有一个基本的模版的&#xff0c;不要自己想当然哦~ 滑动窗口算法思想&#xff08;附经典例题&#xff09;_滑动窗口的思想-CSDN博客 滑动窗口也叫同向双指针&#xff1b;可以先看一下灵山视频&#xff1a;滑动窗口【基础算法精讲 03】_哔哩哔哩_bilibili 3.无重复字…

7.C++面向对象3(拷贝构造函数,赋值运算符重载)

⭐本篇为C学习第7章&#xff0c;主要了解 拷贝构造函数&#xff0c;赋值运算符重载 ⭐本人Gitee C代码仓库&#xff1a;yzc的c学习: 小川c的学习记录 - Gitee.com 上篇讲了6个默认成员函数的构造函数和析构函数。 重要代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS…

Mysql(五) --- 数据库设计

文章目录 前言1.范式1.1.第一范式1.1.1 定义1.1.2.例子 1.2.第二范式1.2.1 定义1.2.2 例子1.2.3.不满足第二范式可能会出现的问题 1.3.第三范式1.3.1 定义2.3.2 示例 2. 设计过程3. 实体-关系图3.1 E-R图的基本组成3.2 关系的类型3.2.1 一对一关系(1:1)3.2.2 ⼀对多关系(1:N)3.…

Pr:视频效果快速参考(合集 · 2024版)

Premiere Pro 自带十七组约一百多个视频效果&#xff0c;涵盖了从变换、颜色控制到风格化等多种用途&#xff0c;帮助用户在视频编辑中实现多样化的视觉表现、进行后期处理以及修正各种画质问题。 提示&#xff1a; 点击下面的效果组名称或截图&#xff0c;即可访问该组里面的效…

SF6气体密度监测仪市场研究:主要企业的市场份额已超过37.13%

SF6气体密度监测仪是一种专用于监测和测量六氟化硫&#xff08;SF6&#xff09;气体密度的设备。SF6气体因其优异的绝缘性能和灭弧能力&#xff0c;被广泛应用于电力行业&#xff0c;尤其是在气体绝缘金属封闭开关设备&#xff08;GIS&#xff09;和断路器等关键设备中。随着电…

【自注意力与Transformer架构在自然语言处理中的演变与应用】

背景介绍 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;序列到序列&#xff08;seq2seq&#xff09;模型和Transformer架构的出现&#xff0c;极大地推动了机器翻译、文本生成和其他语言任务的进展。传统的seq2seq模型通常依赖于循环神经网络&#xff08;RNN&…

微服务Sleuth解析部署使用全流程

目录 1、Sleuth链路追踪 1、添加依赖 2、修改日志配置文件 3、测试 2、zipkin可视化界面 1、docker安装 2、添加依赖 3、修改配置文件 4、查看页面 5、ribbon配置 1、Sleuth链路追踪 sleuth是链路追踪框架&#xff0c;用于在微服务架构下开发&#xff0c;各个微服务之…

刷题 - 分治

面试经典 150 题 - 分治 148. 排序链表⭐️⭐️⭐️ - 快慢指针找中间节点 - 归并排序 伪代码&#xff1a; 将链表拆分成两半&#xff0c;返回右半边头节点&#xff08;左半边头节点就是原始链表头节点&#xff09;对左边进行排序并返回左边头节点对右边进行排序返回右边头节…

使用jenkins将airflow-dbt部署到服务器上

系列文章目录 文章目录 系列文章目录课程地址YT一、jenkins服务器的初始化配置1.1 运行第一个jenkins pipeline二、编写本地dbt项目2.1 克隆git上的初始文件到本地2.2 本地创建虚拟环境2.3 创建airflow的Dockerfile2.4 安装dbt2.5 创建dbt所需要的snowflake数据库2.6 配置docke…

Android开发视频预览效果

Android开发视频预览效果 视频播放不是一个简单的事情&#xff0c;得有暂停&#xff0c;继续播放等功能&#xff0c;屏幕的适配也是头疼的事情 一、思路&#xff1a; 引用的是腾讯播放器TXVodPlayer 二、效果图&#xff1a; 图片不是很直观&#xff0c;也可以看下视频 And…

渗透测试 之 域渗透手法【域内用户枚举】手法 Kerbrute msf pyKerbrute 工具使用详解

说明一下: 域内用户枚举工具使用说说&#xff1a; Kerbrute pyKerbrute MSF模块的使用 域内用户名枚举原理分析&#xff1a; 域内用户枚举攻击防御&#xff1a; 流量检测&#xff1a; 日志层面&#xff1a; 说明一下: 域环境或者内网环境下&#xff0c;可以在没有域环…

npm ERR! PhantomJS not found on PATH

安装phantomj时发生报错 old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. npm ERR! code 1 npm ERR! path /va…

四、Spring Boot集成Spring Security之认证流程

Spring Boot集成Spring Security之认证流程 一、概要说明二、基于内存的用户名密码1、默认用户名密码2、自定义用户名密码3、为方便测试添加测试接口TestController 三、登录登出重要概念介绍四、登录业务逻辑1、登录业务相关过滤器2、访问业务请求处理流程①、访问业务请求地址…

kubernetes中微服务部署

微服务 问&#xff1a;用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f; 答&#xff1a;需要通过微服务暴漏出去后才能被访问 Service 是一组提供相同服务的Pod对外开放的接口借助Service&#xff0c;应用可以实现服务发现和负载均衡Service 默认只…

初学Qt之环境安装与 hello word

环境&#xff1a; Qt Creator 4.11.0 (Community) Qt 5.14.0 目录 1.Qt环境配置 1.1 下载Qt 5.14.0 1.2 注册Qt账号 1.3 安装Qt 1.4 配置环境变量 2.创建项目 2.1 创建一个项目 2.2 初始代码解析 2.3 可视化GUI ​编辑 2.4 hello word 2.4.1 可视化hello word …

链式二叉树及二叉树各种接口的实现(C)

二叉树的性质 若规定根节点的层数为1&#xff0c;则一棵非空二叉树的第 i i i层上最多有 2 i − 1 2^{i-1} 2i−1个结点.若规定根节点的层数为1&#xff0c;则深度为h的二叉树的最大结点数是 2 h − 1 2^{h}-1 2h−1对任何一棵二叉树&#xff0c;如果度为0其叶结点个数为 n 0 …

Koa学习

Koa 安装与配置 1. 初始化项目 在终端中执行以下命令&#xff1a; # 创建项目文件夹 mkdir koa cd koa# 初始化并安装依赖 npm init -y npm install koa npm install nodemon --save-dev2. 修改 package.json 在 package.json 文件中进行如下修改&#xff1a; {"type…

C语言 | Leetcode C语言题解之第472题连接词

题目&#xff1a; 题解&#xff1a; typedef struct Trie {struct Trie * children[26];bool isEnd; }Trie;#define TRIE_INITIAL(node) do { \for (int i 0; i < 26; i) { \(node)->children[i] NULL; \} \(node)->isEnd false; \ }while(0);static void freeTri…