作者:余小小
日期:2021-10-02
数据类型
数据类型就是用来声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储在内存中占用的空间。
在世界上,有很多的分类,就不说阿三过度的三六九等吧,就简单的人和动物的世界,都有很多的类型
就看动物,比如哺乳类,昆虫类,等等,级别。
所以,在c中,在内存中,想要发挥出更好的作用,更优秀的性能, 那么就好定义好一个数据的类型
-
基本数据类型/算数类型:数值类型(整数类型,浮点型),字符型char
-
void类型(空类型)void
-
构造数据类型:数组、结构体、共用体、枚举(后面详细解释)
-
指针类型(后面详细解释)
看不明白,放弃吧,所以只能慢慢来了。
如果叫你一下的认识动物世界里的所有动物,你觉得可能吗,就算造物主来了,都可能提起裤子不认人。
基本数据类型
在生活里我们常用的数字有整数和小数。
所以基本数据类型类型又分为了整数类型即整型(当然这里的整型不是韩国的整形)和浮点类型即浮点型;
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
整型
数据类型 | 占用大小 |
---|---|
short 短整型 | 2 字节 取值范围:-32,768 到 32,767 |
int 整型 【常用】 | 2或4个字节(一般都占用2个字节) 取值范围:-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
long 长整型 | 4 字节 取值范围:-2,147,483,648 到 2,147,483,647 |
其实char也是int类型,在计算机中,字符也是通过对照ACILL表的int数值转换的。
那么简单的总结一下,在c中,最短的是谁?当然是short,最长的是谁?当然是long,见名知意嘛。那么中间的呢,就是int了。
这里扩充一下,在Java语言的四类八种中,有一类也叫做整型,有byte ,short,int,long,这里就占用了四种了,绝吧,在Java里,最短的不是short ,而是byte
那么,在c中有byte么,可以试试看,发现是报错的哦,编译都不通过的。
在c中,如果想要知道一个数据类型占用的内存大小,可以使用sizeof函数
这里补充一个,long long。长长整型,这个很奇怪的名字的数据类型,在c中是存在的
printf("long long:%d\n",sizeof(long long ));
%d:整数占位符
long long:占用8个字节,则是两个long类型的长度,记住,long long之间有个空格的
那么好奇的我试了试,有没有三个long,但是并没有。。。
总结一下:
-
short占用2个字节
-
int占用4个字节
-
long占用4个字节
-
long long 占用8个字节
sizeof
sizeof是C语言的一种单目操作符,sizeof操作符以字节形式给出了其操作数的存储大小。和加减乘除一样,是内置的一个运算符。但是sizeof是带有()括号,所以我喜欢叫他函数,或者说是api,别问为啥,我喜欢这样。
好的,那么就来用用这个sizeof函数。
int main() {
printf("我爱吃鱼香茄子\n");
printf("short所占用的长度是:%d\n",sizeof (short ));
printf("int:%d\n",sizeof (int ));
printf("long:%d\n",sizeof (long ));
return 0;
}
这里简单的提一句啊,我使用Clion的快捷键是用的eclipse的,ctrl+alt+下,向下复制
输入结果,发现乱码了
设置一下编译器的文件编码就行了,如果使用utf8,则在debug的时候没问题,但是运行就会乱码
所以,使用默认的gbk吧,保证控制台一致gbk就没问题了。这个和mingw有关,就懒得深入mingw了
运行结果:
字符型
在c中,字符型只有一个,叫做char,占用1个字节,这个英文字符的情况下,如果是中文字符,可能是2个字节
数据类型 | 占用大小 |
---|---|
char 字符型【常用】 | 1字节 取值范围:(-128 到 127 或 0 到 255) |
因为-128 到 127 或 0 到 255也在int【-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 】的取值范围之内,所以在小于127大于-128的范围里的时候 int可以和char类型相互转换对应的字符
字符的占用空间,和编码格式有关,所以关于中文的测试, 后面详细解释。
ASCII码中:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
其他编码的百度即可
在c中,汉字一般都是占用2个字节
使用sizeof运算符测试字符所占用的长度。
需要注意的是,我使用char定义一个中文变量的时候,使用单引号来定义中文字符,会报错的。但是使用双引号就不会了,而且无论中文个数是多少,char占用的空间都是1个字节,但是中文的定义不是这样使用的。
int main() {
printf("我爱吃鱼香茄子\n");
printf("short所占用的长度是:%d\n",sizeof(short ));
printf("int:%d\n",sizeof(int ));
printf("long:%d\n",sizeof(long ));
printf("-----------------这是分割线----------------------\n");
char a1 ='a';
char a2="我爱吃鱼香茄子";
printf("char:%d\n",sizeof(char ));
printf("a1:%d\n",sizeof(a1 ));
printf("ca2:%d\n",sizeof(a2));
return 0;
}
浮点类型
数据类型 | 占用大小 |
---|---|
float 单精度浮点 【常用】 | 4 字节 取值范围(1.2E-38 到 3.4E+38 )6 位小数 |
double 双精度浮点 【常用】 | 8 字节 取值范围 (2.3E-308 到 1.7E+308 )15 位小数 |
long double | 16 字节 取值范围(3.4E-4932 到 1.1E+4932 )19 位小数 |
简单总结:
-
-
double占用8个字节,
-
long double占用16个字节。
printf("-----------------这是分割线----------------------\n");
printf("float:%d\n",sizeof(float));
printf("double:%d\n",sizeof(double ));
printf("long double:%d\n",sizeof(long double));
c语言的占位符
字符是单引号,用c
字符串是双引号,用s
-
%d, %i 代表整数
-
%f 浮点
-
%s 字符串
-
%c char
-
%p 指针
-
%fL 长log
-
%e 科学计数
-
%g 小数或科学计数。
-
%a,%A 读入一个浮点值(仅C99有效)。
-
%c 读入一个字符。
-
%d 读入十进制整数。
-
%i 读入十进制,八进制,十六进制整数。
-
%o 读入八进制整数。
-
%x,%X 读入十六进制整数。
-
%s 读入一个字符串,遇空格、制表符或换行符结束。
-
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
-
%p 读入一个指针。
-
%u 读入一个无符号十进制整数。
-
%n 至此已读入值的等价字符数。
-
%[] 扫描字符集合。
-
暂无评论内容