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

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

上一篇文章已经介绍说明了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语言的运算符。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲饭疙瘩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值