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

news2024/12/23 0:01:12

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.coloradmin.cn/o/2204287.html

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

相关文章

Elasticsearch 索引数据预处理

pipeline 在文档写入 ES 之前&#xff0c;对数据进行预处理&#xff08;ingest&#xff09;工作通过定义 pipeline 和 processors 实现。 注意&#xff1a;数据预处理必须在 Ingest node 节点处理&#xff0c;ES 默认所有节点都是 Ingest node。 如果需要禁用 Ingest &#x…

Java中的拦截器、过滤器及监听器

过滤器&#xff08;Filter&#xff09;监听器&#xff08;Listener&#xff09;拦截器&#xff08;Interceptor&#xff09;关注点web请求系统级别参数、对象Action&#xff08;部分web请求&#xff09;如何实现函数回调事件Java反射机制&#xff08;动态代理&#xff09;应用场…

《大道平渊》· 廿贰 —— 杀心篇:独立人格的形成

《大道平渊》 独立人格的形成&#xff0c;在杀心的过程中会越来越完备。 在这个漫长的过程中&#xff0c;你会一次次击碎自己固有的三观&#xff0c;慢慢再修复你的三观。 . 不要认为一个人的明白&#xff0c;都是恍然大悟&#xff0c;都是碰到了高人指点。 并不是这样的&a…

使用 Raspberry Pi Pico W 的基于 MQTT 的分布式网络自适应估计

英文论文标题&#xff1a;MQTT based Adaptive Estimation over Distributed Network using Raspberry Pi Pico W 中文论文标题&#xff1a;使用 Raspberry Pi Pico W 的基于 MQTT 的分布式网络自适应估计 作者信息&#xff1a; Prantaneel DebnathAnshul GusainParth Sharm…

46 C 语言文件的打开与关闭、写入与读取函数:fopen、fclose、fputc、fputs、fprintf、fgetc、fgets、fscanf

目录 1 文件的存储形式 2 打开文件——fopen() 函数 2.1 功能描述 2.2 函数原型 2.3 文件打开方式&#xff08;模式&#xff09; 3 关闭文件——fclose() 函数 3.1 功能描述 3.2 函数原型 4 常见的文件写入方式 4.1 fputc() 函数 4.1.1 功能描述 4.1.2 函数原型 4…

第四范式发布全新一代文档数字化管理平台Smart Archive 2.0

产品上新 Product Release 今日&#xff0c;第四范式正式推出全新一代文档数字化管理平台——Smart Archive 2.0。该产品基于第四范式自研的文档处理大模型&#xff0c;实现零样本下对企业文档的精准识别及信息提取。文档处理大模型利用二十多个行业&#xff0c;上百种场景下的…

【华为】默认路由配置

1.配置接入层&#xff1a; LSW1&#xff08;LSW3同理&#xff09;: vlan batch 10 20 in g0/0/1 port link-type ac port default vlan 10 in g0/0/2 port link-type ac port default vlan 20 in g0/0/24 port link-type tr port tr allow-pass vlan 10 20 2.配置汇聚层&#x…

Spring Boot 集成 LiteFlow 实现业务流程编排

LiteFlow 是一款轻量级的流程编排框架,它允许开发者通过简单的配置方式,将复杂的业务流程分解为多个独立的节点,然后通过定义规则来编排节点,达到解耦业务逻辑、提高代码可维护性的目的 1. LiteFlow 的基本概念 在 LiteFlow 中,主要有以下几个概念: 节点 (Node):代表一…

2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序

2015年国赛高教杯数学建模 C题 月上柳梢头 月上柳梢头&#xff0c;人约黄昏后”是北宋学者欧阳修的名句&#xff0c;写的是与佳人相约的情景。请用天文学的观点赏析该名句&#xff0c;并进行如下的讨论&#xff1a;   1. 定义“月上柳梢头”时月亮在空中的角度和什么时间称为…

SKG未来健康校招社招入职测评:综合能力及性格问卷SHL测评题库

SKG未来健康科技股份有限公司在校招和社招过程中使用的SHL测评题库主要考察应聘者的综合能力和性格特征。以下是对这些测评的简要分析&#xff1a; 综合能力测评&#xff1a; 测评时间&#xff1a;46分钟&#xff08;实际答题时间36分钟&#xff09; 题目数量&#xff1a;30题…

多jdk版本环境下,jenkins系统设置需指定JAVA_HOME环境变量

一、背景 由于不同项目对jdk版本的要求不同&#xff0c;有些是要求jdk11&#xff0c;有些只需要jdk8即可。 而linux机器上安装jdk的方式又多种多样&#xff0c;最后导致jenkins打包到底使用的是哪个jdk&#xff0c;比较混乱。 1、java在哪 > whereis java java: /usr/bin/…

不到千元的自动猫砂盆是智商税吗?这四大选购技巧不看就亏大了

虽然现在的人都说&#xff0c;猫砂盆等上班一天回来再清理也没有任何关系&#xff0c;但实际上在这一天里&#xff0c;猫咪的粪便已经在猫砂盆里滋生了很多无法察觉的细菌&#xff0c;久而久之就会影响猫咪的健康&#xff0c;导致尿闭&#xff0c;放了一天的便便臭味也让人无法…

数据结构与算法——Java实现 32.堆

人的想法和感受是会随着时间的认知改变而改变&#xff0c; 原来你笃定不会变的事&#xff0c;也会在最后一刻变得释然 —— 24.10.10 堆 堆是基于二叉树实现的数据结构 大顶堆每个分支的上一个节点的权值要大于它的孩子节点 小顶堆每个分支的上一个节点的权值要小于它的孩子…

PyQt5写好的py文件生成可执行的exe文件【Pyinstaller】

文章目录 pyinstaller介绍特点 1.单个py文件2.多个py文件3.程序图标设置4.打包形式(1)单个exe文件(2)文件夹 5.程序开始前的加载中图片6.UPX打包压缩问题解决办法 7.指令总结 pyinstaller介绍 pyinstaller 属于Python第三方库&#xff0c;可以将py文件在不同平台上打包为exe可执…

鸿蒙NEXT开发-沉浸式导航和键盘避让模式(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

架构与思维:漫谈高并发业务的CAS及ABA

1 高并发场景下的难题 1.1 典型支付场景 这是最经典的场景。支付过程&#xff0c;要先查询买家的账户余额&#xff0c;然后计算商品价格&#xff0c;最后对买家进行进行扣款&#xff0c;像这类的分布式操作&#xff0c;如果是并发量低的情况下完全没有问题的&#xff0c;但如果…

企业级私有化即时通讯软件:高效沟通与安全保障的优选

在当今这个信息化高速发展的时代&#xff0c;企业面临着前所未有的沟通挑战与信息安全压力。为了应对这些挑战&#xff0c;企业级私有化即时通讯软件应运而生&#xff0c;它不仅优化了内部沟通流程&#xff0c;还确保了数据的安全性与管理的深度需求得到满足。以下将从“助力大…

k8s部署jenkins集群,配置集群kubernetes plugin的pod模板

一、配置集群 填写k8s地址&#xff1a;https://kubernetes.default.svc.cluster.local 命名空间&#xff1a;kubernetes-plugin Jenkins地址&#xff1a;http://jenkins:18080 Jenkins通道&#xff1a;jenkins:50000 jenkins是容器别名 设置jenkinsslave的标签属性 二、…

2024年CSS @规则(At-rules)新增数量超过过去十年的总和,CSS @规则(At-rules)详解系列目录

2024年CSS 规则(At-rules)新增数量超过过去十年的总和&#xff0c; CSS 规则(At-rules)详解系列目录 本文目录&#xff1a; 零、时光宝盒 一、CSS 规则(At-rules)发展状况 二、什么是CSS 规则(At-rules) 2.1、一些背景 2.2、概念 2.3、CSS规则(At-rules) 规则(At-rules…

快速解决urllib3.exceptions.MaxRetryError: HTTPSConnectionPool

正题 使用pip命令查看urllib3版本 pip list发现版本为 1.26.9 urllib3 v1.26.9此时如下报错&#xff0c;无法正常使用&#xff08;使用了代理&#xff09; urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hostxxx.xxxxx.com, port443): Max retries exceeded wit…