C语?提供了丰富的数据类型来描述?活中的各种数据。
使?整型类型来描述整数,使?字符类型来描述字符,使?浮点型类型来描述?数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
下面我们主要介绍C语言内置类型。
char
[signed] char
unsigned char
signed unsigned指的是有符号与无符号,有符号有正负之分,下文将介绍
//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//?整型
long [int]
[signed] long [int]
unsigned long [int]
//更?的整型
//C99中引?
long long [int]
[signed] long long [int]
unsigned long long [int]
float
double
long double
C语?原来并没有为布尔值单独设置?个类型,?是使?整数 0 表?假,?零值表?真。 在 C99 中也引?了 布尔类型 ,是专?表?真假的。
_Bool
布尔类型的使?得包含头?件 <stdbool.h> 布尔类型变量的取值是:true或者false.
#define bool _Bool
#define false 0
#define true 1
举个栗子,代码如下:
#include<stdbool.h>
#include<stdio.h>
int main()
{
_Bool flag = true;
if (flag)
printf("i like C\n");
return 0;
}
运行结果如下:
??如果没有包含头文件:
#include<stdbool.h>
就会出现下面的结果
每?种数据类型都有??的?度,使?不同的数据类型,能够创建出?度不同的变量,变量?度的不同,存储的数据范围就有所差异。
??那我们应该怎么求各种数据类型的长度呢?
可以借助sizeof操作符来求; sizeof 是?个关键字,也是操作符,专?是?来计算sizeof操作符数的类型?度的,单位是字节; sizeof 操作符的操作数可以是类型,也可是变量或者表达式。
sizeof( 类型 )
sizeof 表达式
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的; sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出??; sizeof 的计算结果是 size_t 类型(无符号整型)的。
??sizeof 运算符的返回值,C语?只规定是?符号整数,并没有规定具体的类型,?是留给系统??去决定, sizeof到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是unsigned long ,甚?是 unsigned long long ,对应的 printf() 占位符分别是 %u 、 %lu 和 %llu。这样不利于程序的可移植性。C语?提供了?个解决?法,创造了?个类型别名 size_t ,?来统?表? sizeof的返回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long 。
#include <stdio.h>
int main()
{
int a = 10;
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof a);//a是变量的名字,可以省略掉sizeof后边的()
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(3 + 3.5));
return 0;
}
结果如下:
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof(_Bool));
printf("%zd\n", sizeof(short));
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(long));
printf("%zd\n", sizeof(long long));
printf("%zd\n", sizeof(float));
printf("%zd\n", sizeof(double));
printf("%zd\n", sizeof(long double));
return 0;
}
在VS2022X64配置下的输出:
??我们要注意sizeof中表达式不计算
//测试:sizeof中表达式不计算
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%d\n", sizeof(s = b+1));
printf("s = %d\n", s);
return 0;
}
运行结果如下:
sizeof 在代码进?编译的时候,就根据表达式的类型确定了,类型的常?,?表达式的执?却要在程序运?期间才能执?,在编译期间已经将sizeof处理掉了,所以在运?期间就不会执?表达式了。
C语?使? signed 和 unsigned (有符号与无符号)关键字修饰字符型和整型类型的。 signed 关键字,表??个类型带有正负号,包含负值; unsigned 关键字,表?该类型不带有正负号,只能表?零和正整数。 对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。 由于这是默认情况,关键字 signed ?般都省略不写,但是写了也不算错。
signed int a;
// 等同于int a;
整数变量声明为 unsigned 的好处是,同样?度的内存能够表?的最?整数值,增?了?倍。?如,16位的 signed short int 的取值范围是:-32768~32767,最?是32767;? unsigned short int 的取值范围是:0~65535,最?值增?到了65,535。
这是因为16位有符号的第一位表示符号位,0表示+(正),1表示-(负),所以相较于无符号少了一位自然表示范围也就较小
如果要查看当前系统上不同数据类型的极限值: limits.h ?件中说明了整型类型的取值范围。 float.h 这个头?件中说明浮点型类型的取值范围。
??我们可以通过以下常量得知数据的最值:
? SCHAR_MIN , SCHAR_MAX :signed char的最?值和最?值。 ? SHRT_MIN , SHRT_MAX :short的最?值和最?值。 ? INT_MIN , INT_MAX :int的最?值和最?值。 ? LONG_MIN , LONG_MAX :long的最?值和最?值。 ? LLONG_MIN , LLONG_MAX :long long的最?值和最?值。 ? UCHAR_MAX :unsigned char的最?值。 ? USHRT_MAX :unsigned short的最?值。 ? UINT_MAX :unsigned int的最?值。 ? ULONG_MAX :unsigned long的最?值。 ? ULLONG_MAX :unsigned long long的最?值。
了解清楚了类型,我们使?类型做什么呢?类型是?来创建变量的。 ??什么是变量呢?C语?中把经常变化的值称为变量,不变的值称为常量。
变量创建的语法形式是这样的:
data_type name;
| |
| |
数据类型 变量名
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量
??变量在创建的时候就给?个初始值,就叫初始化。
int age = 18;
char ch = 'w';
double weight = 48.0;
unsigned int height = 100;
? 全局变量:在?括号外部定义的变量就是全局变量全局变量的使?范围更?,整个?程中想使?,都是有办法使?的。 ? 局部变量:在?括号内部定义的变量就是局部变量局部变量的使?范围是?较局限,只能在??所在的局部范围内使?的。
#include <stdio.h>
int global = 2023;//全局变量
int main()
{
int local = 2018;//局部变量
printf("%d\n", local);
printf("%d\n", global);
return 0;
}
思考:如果局部和全局变量,名字相同呢?
#include <stdio.h>
int n = 1000;
int main()
{
int n = 10;
printf("%d\n", n);//打印的结果是多少呢?
return 0;
}
大家可以在心里想一想答案
??答案揭晓:
其实当局部变量和全局变量同名的时候,局部变量优先使?。
以上就是C语言内置数据类型和变量的介绍啦~,大家都学废了吗??完结撒花 ~??有问题可以打在评论区或私信土土哦 ~