C语言的数据类型和变量

目录

一、数据类型

1.介绍

1.1.1 字符型

1.1.2 整型

1.1.3 浮点型

1.1.4 布尔类型

2.各种数据类型的长度

1.2.1 sizeof操作符

1.2.2 数据类型的长度

1.2.3 sizeof表达式不计算

3.signed和unsigned

4.数据类型的取值范围

二、变量

1.变量的创建

2.变量的分类


一、数据类型

1.介绍

  今天介绍的都是内置类型,自定义类型在后期相应的章节会单独介绍。

1.1.1 字符型

  字符的英文单词是character,在C语言中使用char表示字符型。

char
signed char     //有符号
unsigned char   //无符号

1.1.2 整型

  整数的英文单词是integer,在C语言中使用int表示整型。整型主要分为四类,分别为short int,int,long int,long long int。在第一、三、四类中,int可以省略不表示。在这四类中signed都可以省略。

//短整型
short int
signed short int
unsigned short int

//整型
int
signed int
unsigned int

//长整型
long int
signed long int
unsigned long int

//更长的整型
long long int
signed long long int
unsigned long long int

1.1.3 浮点型

   主要分为三类,单精度浮点型:float,双精度浮点型:double,精度更高的浮点型:long double,原则上long double的长度比double更大。

   一般输入浮点数默认为double类型。

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

1.1.4 布尔类型

  C语言中最开始没有为布尔值单设一个类型,而是用0表示假,非零值代表真,后来在C99中引入了布尔类型,专门表示真假。使用时必须包含头文件<stdbool.h>,布尔值的变量取值是:true或者false。

_Bool

  接下来,我们用具体的代码来体会布尔类型的运用。

_Bool这样的数据类型命名和之前的int、double非常不一致,不仅添加了下划线还需要大写,为了使用方便,也可以用bool表示。

2.各种数据类型的长度

  每一种数据类型给都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,存储的数据范围也会有所不同。

1.2.1 sizeof操作符

  sizeof是一个关键字,既可以计算变量长度也可以计算数据类型的长度,也可以是表达式。计算的结果单位是字节。sizeof的返回类型是size_t,要打印sizeof计算的值,打印格式应该为%zd。

在计算变量的时候,可以省略sizeof后面的()

接下来,我们从具体的例子来分析体会sizeof的具体用法。

在第一个例子中,变量里面存储的就是整型数据,占四个字节。第二个例子是第一种的另一个表示方法,计算结果相同。int类型占四个字节,这点与前面两个例子相互印证。 

值得关注的是最后两个例子。

在倒数第二个例子中,计算了一个表达式的长度,前一个数字是int整型,后一个数字是double类型,两个不一致,最后计算结果会用较大的数据类型覆盖较小的数据类型,所以最后的计算结果是double所占的8字节。

在最后一个例子中,没有加括号来表示计算范围,sizeof默认计算的是数据3所占的字节数,int类型占4个字节,在加上数字5,则表示9,关键在于,没有计算数字5的长度而把他仅仅作为5来使用。

**返回类型是size_t怎么理解?

**C语言中只规定sizeof的返回值是无符号的整型,但是无符号的整型还有很多种,例如:signed short int,signed int,signed long int,signed long long int。他们的占位符各不相同,不好统一,不符合程序的可移植性。所以创建了一个类型别名size_t,用来统一sizeof的返回值类型。**

1.2.2 数据类型的长度

我们可以通过sizeof来计算各个数据类型的大小。

C语言标准规定:sizeof(long)>=sizeof(int),long整型既可能4字节也可能是8字节。为了防止数据溢出,经常会使用long long数据类型。同样的,long double也有可能表示16个字节。

**字节怎么理解?究竟是多大?

一个字节表示是八个比特位。计算机识别的是二进制,是数字1和0,每个数字占一个比特位。**

1.2.3 sizeof表达式不计算

  sizeof里面的表达式不会真实计算,而是只会计算大小。

我们通过一个例子来体会。

#include <stdio.h>

int main()
{
	short s = 2;
	int b = 10;
	printf("%zd", sizeof(s = b + 1));
	printf("%d", s);
	return 0;
}

s是short int类型,占2个字节,b是int类型,占4个字节。当大类型的数值强行赋值在小类型中,会大的数据类型会被截断,以小类型为主。

按照之前的逻辑,后一个数字应该输出11,但是由于sizeof里面的表达式不计算,所以s里面的数值还是2。

3.signed和unsigned

  这两个关键字用于修饰字符型和整型数据类型。

  signed:有符号的,可以存放正数,也可以存放负数和0。

  unsigned:无符号的,该类型不带有正负符号,只能表示0和正整数。

  在表示特定的数值时,比如年龄、人数的数据,只能是正数,更加方便与严谨。同时使用signed,同样长度的内存能够表示最大的整数类型增长了一倍。比如,16位的signed short int的取值范围是-32768-32767,而unsigned short int的取值范围是0-65535。

  signed int == int但是signed char == char这是不确定的,这取决于编译器。

4.数据类型的取值范围

  每一种数据类型的都有自己的取值范围,也就是存储的最大值和最小值。在头文件<limits.h>中说明了整型类型的取值范围,<float.h>中说明了浮点类型的取值范围。

在软件everything中可以查看这些头文件的内容,这是下载链接:下载 - voidtools,大家可以动手实操一下。

二、变量

1.变量的创建

  数据类型是为了创建变量服务的,C语言中把经常变化的量称为变量,不变的值称为常量。

  变量的创建需要前者为数据类型,后者为变量名,中间空格隔开。

data_type name;
  • 变量命名的一般规则:
  • 只能由字母(包括大写小写)数字和下划线组成
  • 不能以数字开头
  • 变量名中区分大小写
  • 变量名不能使用关键字

在创建变量的同时直接赋值是变量的初始化。

  变量创建的本质是在内存中开辟一个空间。我们在看看内存的状态,后期再详细介绍。

2.变量的分类

  主要分为全局变量和局部变量。

  全局变量:在大括号外部定义的变量,使用范围更广,在整个工程中都可以使用。

  局部变量:在大括号内部定义的变量,使用范围比较局限,只能在自己所在的局部范围使用。

**全局变量和局部变量的名字相同时? 我们用一个例子来体会。

**

#include <stdio.h>

int num1 = 100;
int main()
{
	{
		int num1 = 200;
		printf("%d", num1);
	}
	return 0;
}

输出的数据究竟是100还是200?

答案是200,当同名时,局部变量优先使用。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值