【C语言学习教程---2】C语言的数据类型

2023-11-07

事物的难度远远低于对事物的恐惧

上一篇文章已经介绍说明了Visual C++的安装和使用,链接如下:
【C语言学习教程—1】VC++6.0的安装和创建简单C语言工程文件教程
文末有程序代码免费的获取方式!!!!
本篇文章开始正式讲解和介绍C语言的知识,在学习一门新语言时首先需要先了解它的基本知识,比如数据类型、运算符、表达式和数据的输入和输出等。

C语言的数据类型

C语言的数据类型可以分成4种:基本类型、构造类型、指针类型和void空类型,整体类型图如下图所示:
在这里插入图片描述
初学者初次看到上面的结构图时,可能会觉得C语言的数据种类有点多,不过不用着急首先将基本类型学清楚学懂就可以了,其他的后续将会进行介绍。
计算机在保存不同的数据类型时所占用的内存大小也是不同的,如下图所示(单位:字节):
在这里插入图片描述
由于不同数据类型所占用的内存大小不同,因此各自所能表示的取值范围也是不同的,具体如下图:
在这里插入图片描述
在以后编程时,可以参照上表中各个数据类型的取值范围,从而定义合适变量进行使用。

一. 常量和变量

常量:在程序运行时,其值不能被改变的量,常量也分为不同的类型:
1)整型常量,如66,789等;
2)浮点型常量,如12.5,56.3等;
3)字符常量,用一对单引号包含起来的一个字符,如’a’,'e’等。
先看一行代码,其中printf()函数是C语言中用于输出结果的语句,会将双引号之间的内容进行输出,其中%d是一个格式符,专门用来显示一个十进制整数,其中\n是换行符:

printf("12加34的结果是%d\n",12+34);

上面的语句的输出结果是:

1234的结果是46

在引入变量之前,首先需要了解标识符和保留字两个概念:

1)标识符:由字母、数字和下划线三种字符组成,并且第一个字符必须是字符或者下划线,如temp、test、_abc都是合法的标识符。
2)保留字:系统保留起来,有特殊的用途,所以不能将保留字作为标识符来使用,否则就会出现语法错误,C/C++保留字如下图所示:
在这里插入图片描述
那么变量是什么呢?变量与常量不一样,常量一般是一个字面值,比如56,就是一个常量,不能被修改,而变量的名字如下:
变量:其值可以改变的量,变量肯定会有一个变量名,在内存中会占用一定的空间,变量名其实就是一个标识符,同时变量名是区分大小写的,大小写不同的变量会被认为是两个不同的变量。
在使用变量之前,我们需要对其进行定义,变量的定义格式如下:
类型名 变量名[ = 变量初值];
其中,[ ]中的内容可以省略,在格式表达中,凡被[ ]括起来的内容都可以省略。
下面的语句是定义了两个不同的变量:(注意:在C语言中 分号 被用作为语句结束的标志)

int abc;
int ABC;

二. 整形数据

在人们日常生活中数字常常以十进制的形式出现和使用,除了十进制以外常用的还有八进制和十六进制。
1)八进制
先来看程序2_1

#include <stdio.h>

int main()
{
	int date = 023;
	printf("date的十进制数据为:%d\n",date);
	return 0;
}

其中第一行是包含对应的头文件,然后才能使用printf( )函数,然后在主函数中定义一个int变量,并为其赋值23(八进制,定义变量并赋值以0开头的数值时,默认为8进制),最后通过printf( )函数进行输出,运行结果过如下:

date的十进制数据为:19 
Press any key to continue 

从结果中可以看出,程序计算正确,结果为82+13=19。
2)十六进制
先看程序2_2

#include <stdio.h>

int main()
{
	int date = 0x23;
	printf("date的十进制数据为:%d\n",date);
	return 0;
}

上面程序结构与程序2_1相似,在给变脸达特赋值时,赋的是0x23,以0x开的数据表示十六进制,对程序进行编译和运行,结果如下:

date的十进制数据为:35 
Press any key to continue 

从结果中可以看出,程序计算正确,结果为162+13=35。

  1. 整型变量的分类
  • 基本类型:int
  • 短整型:short int(简写为short)
  • 长整型:long int(简写为long)
  • 无符号型:unsigned shor,unsigned int,unsigned long

上述的四种类型都是表示整型数据的,由于基本型、短整型和长整型所占用的内存大小不一样,因此各自能表示的数值范围也不一样的,可以参考上面图片中的数据。其中无符号型只能表示零和正整数,由于不需要符号位,因此所能表示的数值范围 比其对应的类型更大一些。
在程序中可以通过运算符sizeof(sizeof是一个运算符,而不是一个函数)获得各个类型在内存中所占用的字节数,与变量中所存储的数据没有关系,程序2_3如下:

#include <stdio.h>

int main()
{
	short a = 1;
	int b = 2;
	long c = 3;
	printf("short型所占用的字节数:%d\n",sizeof(a));
	printf("int型所占用的字节数:%d\n",sizeof(b));
	printf("long型所占用的字节数:%d\n",sizeof(c));
	return 0;
}

依次定义short、int、long三种类型的变量,然后使用sizeof获得各自所占用的字节大小,运行的结果如下:

short型所占用的字节数:2
int型所占用的字节数:4
long型所占用的字节数:4 
Press any key to continue 

从运行结果中,可以看出与之前描述的符合。

  1. 整型变量的定义

在上面的几个程序中,已经定义了很多变量,在变量定的过程中需要注意的是:1)变量的名称需要符合标识符的定义规则,否则程序会报错。2)变量在定义的时候可以为其赋初值,也可以不为其赋初值。
同时还有一些特殊的写法:

  • 在一个常数后面加一个字母U或者u,表示该常数用无符号整型方式存储,相当于unsigned int。
  • 在一个常数后面加一个字母L或者l,表示该常数用长整型方式存储,相当于long。
  • 在一个常数后面加一个字母F或者f,表示该常数用浮点方式存储,相当于float。

一些例子:

long int test = 78L;
unsigned int test2 = 345U;

三. 浮点型数据

  1. 浮点型常量的表现形式
  • 十进制:1.23,4.5689等等
  • 指数形式:23E5,123E2等,其中23E5即为23*10的5次方。
  1. 浮点型变量的分类

在C语言中,浮点型变量分为单精度和双精度两种:

  • float:单精度变量
  • double:双精度变量
  1. 浮点型变量的定义

看如下程序2_4

#include <stdio.h>

int main()
{
	float a = 1.2f,b = 2.5f;
	double c = 3.8,d = 4.7;

	printf("a=%f\nb=%f\nc=%lf\nd=%lf\n",a,b,c,d);

	return 0;
}

分别定义了float类型的a和b,和double类型的c和d,由于常量1.2和2.5个3.8和4.7默认为double类型,所以在给变量a和b赋值的时候需要指明常量的存储类型,否则会出现warning(警告)。运行结果如下:

a=1.200000
b=2.500000
c=3.800000 
d=4.700000
Press any key to continue  

注意:在对float类型变量和double类型变量输出的时候,需要使用%f和%lf。

问题:float和double的区别是什么呢??
答:首先在在内存存储所占用的字节数是不一样的,float一般占用4个字节,double一般占用8个字节,这就意味着double类型的变量能够表示更大范围的数据,同时还具有更高的精度。
float能表示的范围为(1.17549E-038)~(3.40282E+038),精度在6位左右。
double能表示的范围为(2.22507E-308)~(1.79769E+308)精度在15左右。

三. 字符型数据

  1. 字符常量
    在C语言中字符常量使用单引号包含起来的一个字符,如’a’,'d’等等。
  2. 转义字符
    转义字符又称为特殊字符,是以"“开头的字符序列,比如之前在printf中使用的”\n",就是一个特殊字符,目的是换行,部分的转义字符如下图所示:
    在这里插入图片描述
    下面以程序2_5为例,看一下转义字符的使用:
#include <stdio.h>

int main()
{
	printf("abc\ndefg\\hij\"lmn\n");
	return 0;
}

运行结果如下:

abc
defg\hij"lmn
Press any key to continue   

从运行结果中可以看出,\n被识别成了换行,\被识别成了\,“被识别成了”。

  1. 字符变量
    字符变量是用来存储字符常量的,但需要注意,只能存储一个字符,而不能存储一个字符串,因此一个字符变量在内存中只占用一个字节,字符变量输出的时候使用%c,程序2_6如下:
#include <stdio.h>

int main()
{
	char a,b,c;
	a = 'A';
	b = 'B';
	c = '\"';
	printf("a=%c\nb=%c\nc=%c\n",a,b,c);
	return 0;
}

运行结果如下:

a=A
b=B
c="
Press any key to continue  

从结果中可以看出,程序成功的将对应的字符存储到了相应的字符变量中,
现在需要思考一个问题:字符变量是如何存储在计算机的内存中的呢?
此时就需要了解一下ASCⅡ码,常用的ASCⅡ表如下图所示:
在这里插入图片描述
每一个字符都对应一个ASCⅡ值,在计算机内存中就是存储字符变量的ASCⅡ值,来看一下程序2_7

#include <stdio.h>

int main()
{
	char a,b,c;
	a = 'a';
	b = 66;
	c = 99;
	printf("字符a变量存储的ASCII值为:%d\nb=%c\nc=%c\n",a,b,c);
	return 0;
}

运行结果如下:

字符a变量存储的ASCII值为:97
b=B
c=c  
Press any key to continue 

从运行结果可以看出,字符’a’在内存中存储的值为97,通过查阅ASCⅡ表可知,'a’对应的ASCⅡ值就是97,同样也可以给字符变量赋值一个数字,然后以字符的形式输出,就会输出对应的字符变量。

  1. 字符串变量
    之前说过字符变量是以单引号包含的,而字符串变量是以双引号包含的,比如下面两条语句:
char c;
c = 'a';	//正确的
c = "a";	//错误,不能将字符串常量赋值给字符变量

现在来思考一下,为什么不能将字符串常量赋值给字符变量呢???
首先需要明确一个事情,那就是字符变量在内存中只占用一个字节的内存,
‘a’:这个字符常量里面只存储了一个字符’a’
“a”:然而这个字符串常量中,存储了一个字符’a’,和一个字符’\0’
如下图所示:
在这里插入图片描述
即:每一个字符串常量都是以’\0’结尾的,同时’\0’这个字符是输出语句的结束字符,看一下下面的程序2_8

#include <stdio.h>

int main()
{
	printf("abcdef\0AAAABBB\n");
	return 0;
}

运行结果为:

abcdefPress any key to continue 

从运行结果可以看出,程序只输出了abcdef,然后遇到了字符’\0’,程序认为此串字符输出结束了。

至此C语言的基本数据类型都已经介绍完啦,下一个文章将介绍C语言的运算符。

技术交流、程序代码免费获取方式:微信扫描下方二维码
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言学习教程---2】C语言的数据类型 的相关文章

随机推荐

  • Hibernate环境搭建(小实例)

    Hibernate是一个开源的对象关系映射框架 在学习之前 首先让我们先了解一下Hibernate环境是如何搭建的 废话不多说 直接进入正题 建项目 引Jar包 首先 我们需要创建一个Java项目 创建好项目之后 就需要引入与Hiberna
  • unity的HDR效果

    http blog csdn net wolf96 article details 44057915 文章开始先放两组效果 文章结尾再放两组效果 本文测试场景资源来自浅墨大神 shader效果为本文效果 HDR 人们有限的视觉系统 只支持1
  • 【DS】单链表@线性表 —— 增删查改

    目录 0 引 1 链表的概念和结构 2 链表的分类 3 链表的实现 3 1 打印 申请新节点 销毁 3 1 1 打印 3 1 2 申请新节点 3 1 3 销毁 3 2 尾插 尾删 3 2 1 尾插 3 2 2 尾删 3 3 头插 头删 3
  • 物联网场景中,我们如何选择时序数据库 ?

    如今时序数据的应用场景十分广泛 许多类型的数据都是时间序列数据 金融市场交易 传感器测量 水冷 高温 地震 服务器监控 CPU 内存 磁盘 资源消耗 能源 电力 人体健康 心率 血氧浓度 网络访问 通过保留数据固有的时间序列性质 我们可以记
  • mysql:ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value:

    发现某个组件的表单输入报错 Error ER TRUNCATED WRONG VALUE FOR FIELD Incorrect string value xE6 x88 x91 xE4 xBB xAC for column content
  • 【算法与数据结构】235、LeetCode二叉搜索树的最近公共祖先

    文章目录 一 题目 二 解法 三 完整代码 所有的LeetCode题解索引 可以看这篇文章 算法和数据结构 LeetCode题解 一 题目 二 解法 思路分析 本题和这道题类似 算法与数据结构 236 LeetCode二叉树的最近公共祖先
  • Linux下Samba的配置

    参考 http www cnblogs com mchina archive 2012 12 18 2816717 html 前言 为了实现windows 和 Linux以及其他操作系统之间的资源共享 软件商推出nfs 和samba两种解决
  • Air101

    目录 1 合宙Air101 固件编译可参考 PinOut V2 1092400 管脚映射表 PinOut V2 1091800 2 Air103 最新固件下载 固件编译可参考 PinOut V3 21112201 管脚映射表 资料链接 Pi
  • Solid JS基础

    Solid js 用于构建用户界面的声明式 高效且灵活的 JavaScript 库 您可以在 官方教程 中尝试下面提到的部分例子 本文引用并简化了官方教程中的部分例子 本文讲述部分 solid 主要内容 更多详细内容 移步 Solid AP
  • 编码器的使用

    首先来看一下增量式编码器的输出信号和它的信号倍频技术 增量式编码器输出的脉冲波形信号形式常见的有两种 一种是占空比50 的方波 通道A和B相位差为90 另一种则是正弦波这类模拟信号 通道A和B相位差同样为90 对于第1种形式的方波信号 如果
  • MATLAB量化浮点数

    在做算法设计和验证时 常在matlab进行浮点验证 然后量化后在用在FPGA上 对于类似与FIR这些滤波器系数 matlab直接可以export出来 但是在验证麦克风或者ADC出来的24bit补码这类时常常需要使用matlab生成定点数进行
  • 有关DHCP、链路聚合、NAT、ACL、Telnet配置小综合实验

    实验需求 1 局域网中存在VLAN10 VLAN20 VLAN30和VLAN40四个部门 IP网段 应192 168 10 0 24 192 168 20 0 24 192 168 30 0 24 192 168 40 0 24 2 业务V
  • Linux虚拟机 Ubuntu16 cheese命令打开摄像头黑屏,以及mjpg-stream框架不显示视频界面。

    在Linux虚拟机 Ubuntu16打开笔记本的摄像头时 用 ubuntu16的cheese命令显示黑屏 如下图 解决方法 1 查看虚拟机是否已经已连接上摄像头 显示断开连接 连接主机 D 则虚拟机已连接上摄像头 2 确认摄像头 笔记本的摄
  • 搭建环境【2】windows主机和ubuntu互传文件的4种方法

    我的ubuntu系统是安装在 VMware 虚拟机中的 两者之间经常要互传文件 下面介绍4种常用的互传文件方法 1 共享文件夹方式互传 在虚拟机中需要开启共享文件夹的功能 首先虚拟机中的ubuntu要求是已经开机了的状态 然后进行设置 虚拟
  • 山东轻工业学院高校俱乐部主席“我和我的CSDN高校俱乐部”

    今天天气不错 上午收到了CSDN邮寄过来的2012年度优秀主席证书以及奖品 心情也不错 感谢CSDN教育事业部全体同事一年来对我们工作的支持与帮助 同时也感谢那些奋战在一线的兄弟姐妹们 你们为轻工学院CSDN高校俱乐部所做的一切 我永远铭记
  • ThreadLocal - ThreadlMap与弱引用

    ThreadLocal源码 在看ThreadLocal源码的时候 其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc static class ThreadLocalMap static class Entr
  • C++ string字符串修改和替换方法详解

    字符串内容的变化包括修改和替换两种 本节将分别讲解字符串内容的修改和字符串内容的替换 字符串内容的修改 可以通过使用多个函数修改字符串的值 例如 assign operator erase 交换 swap 插入 insert 等 另外 还可
  • 使用Guava RateLimiter限流以及源码解析

    前言 在开发高并发系统时有三把利器用来保护系统 缓存 降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时 需要暂时屏蔽掉 待高峰或者问题解决后再打开 限流 限流的目的是通过对并发
  • win10 graphedit存储的路径

    如果安装郭windows SDK的话 可能的存储位置为C Program Files x86 Windows Kits 10 bin x86 C Program Files x86 Windows Kits 10 bin x64
  • 【C语言学习教程---2】C语言的数据类型

    事物的难度远远低于对事物的恐惧 上一篇文章已经介绍说明了Visual C 的安装和使用 链接如下 C语言学习教程 1 VC 6 0的安装和创建简单C语言工程文件教程 文末有程序代码免费的获取方式 本篇文章开始正式讲解和介绍C语言的知识 在学