编程语言 | C | 2. 数据类型

这篇博客详细介绍了C语言中的数据类型,包括基本类型的整型、浮点型和字符型,以及枚举类型(enumeration)的定义与使用,如自定义整数范围、限定变量范围等。同时,还阐述了空类型(void)在函数声明和参数传递中的应用。此外,简要提到了派生类型,如指针、数组、结构体和共用体。
摘要由CSDN通过智能技术生成

没有人喜欢孤独, 只是不喜欢失望罢了! 村上春树–<挪威的森林>

编程语言 | C | 2. 数据类型

在这里插入图片描述

2.1 基本类型
2.1.1 整形类型

32位操作系统, ANSI标准下:

  • (1) 基本整型 (int) 4Byte
  • (2) 短整型 (short int) 2Byte
  • (3) 长整型 (long int) 4byte
  • (4) 双长整型 (long long int) 8Byte
  • (5) 字符型 (char) 1Byte
  • (6) 布尔类型 (bool)
#include <stdio.h>
int main(){
	printf("%\n", sizeof(char));       // 1
	printf("%\n", sizeof(short));      // 2     
	printf("%\n", sizeof(int));        // 4
	printf("%\n", sizeof(long));       // 4  
	printf("%\n", sizeof(long long));  // 8
	printf("%\n", sizeof(float));      // 4
	printf("%\n", sizeof(double));     // 8
	printf("%\n", sizeof(long double));// 8
	return 0;     // sizeof 是C语言中的运算符, 功能是告诉
}                 // 我们某个变量或者某个类型占了几个字节
数据类型:
char        //字符数据类型    -128---+127       0-255        1个字节
short       //短整型         -32768---+32767   0-65535      2个字节
int         //整形           -21亿---+21亿     0-49亿        4个字节              
long        //长整型                                        4个字节
long long   //更长的整形                                     8个字节
float       //单精度浮点型                                   4个字节
double      //双精度浮点型                                   8个字节
2.1.2 浮点类型
  • 单精度浮点型 (float) 4Byte
  • 双精度浮点型 (double) 8Byte
  • 复数浮点型 (float_complex, double_complex, long_complex)
2.1.3 内存大小
  • Bit–>Byte–>Kb–>Mb–>Gb–>Tb–>Pb
  • 8Bit = 1 Byte, 1024 = 2^10
  • 1G = 1024M = 1024 * 1024KB = 1024 * 1024 * 1024B = 2^30B = 1,073,741,824B (10亿)
2.1.4 总结
  • 讨论不同类型的数据在内存中分配多少个字节是需要看操作系统的。
2.2 枚举类型 (enumeration), 空类型 (void)
2.2.1 enum

(1) 枚举的定义

enum 标识符 
{
      枚举数据表
}

注意事项

  1. enum是关键字,标识枚举类型,定义枚举类型必须用enum开头。
  2. 枚举数据表中的名字是程序员自己设定,这些名字只是一个符号。枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号隔开。
  3. 枚举数据表的值都是整数,第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1,也可以人为设定枚举成员的值,从而自定义某个范围内的整数。
  4. 可以在定义类型时对枚举常量初始化。
  5. 枚举类型可以进行比较。
  6. 枚举常量不是字符串,不能用%s方式输出字符串。
  7. 枚举型是预处理指令#define的替代。

(2) 枚举的使用
1. 一次定义多个变量

初始位置有值

#include<stdio.h>
enum week {Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};
 
int main()
{
    printf("%d",Tue);
    return 0;
}
  • 像这样定义以后,Mon的值为1,Tue的值为2,Wed的值为3,Thu的值为4, Fri的值为5, Sat的值为6, Sun的值为6, 一次类推.就可以像使用define之后的常量一样的使用定义的7个值了。

初始位置的枚举变量不设值

  • 如果开头不写Mon=1的话,Mon的默认值为0,然后从0开始增长。例如:
enum color {red,blue,green,yellow};
  • 如果我们这样定义的话,red的值为0,blue的值为1,然后依次增长。

为中间某个位置的枚举变量设值

enum color {
	red,
	blue,
	green=5,
	yellow
};
  • 那么red到blue是按照默认的从0开始增长的, 如果green的值定义为5,然后green之后的值都是从5开始增长的。

为每个枚举的变量赋值

  • 当然你也可以为每个枚举的变量都赋值,这样就和全都用define定义是一样的了,如果枚举中有某个值没有被赋值,那么它将是从前一个赋值的变量开始,一次增加1。

2. 限定变量的范围

  • 比如我们的应用程序中要处理有关月份的东西,显然月份只能取1-12中的某个数字,为了保证程序的正确性和健壮性,我们应该使用enum。
#include<stdio.h>
enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec};
 
int main()
{
    enum Month a =  Feb;
    printf("%d",a);
    return 0;
}

3. 使用enum定义的几种方法
(1) 在定义enum的同时, 声明变量

enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} a,b;
  • 这样就声明了两个枚举类型a和b。

(2) 定义完enum之后再声明变量

enum Month {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec};
enum Month a =  Feb;

(3) 定义匿名的枚举变量

enum  {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} a;
  • 这样的话, 只能使用a这一个枚举类型的变量,不能再定义其他的枚举类型。

(4) typedef enum则是用来定义一个数据类型, 那么该类型的变量值只能在enum定义的范围内取

typedef enum  {Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,dec} Day;
Day a, b;

总结

  • 同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量!
2.2.2 void

(1) 定义

  • void 中文翻译为"无类型",有的也叫"空类型",常用在程序中对定义函数的参数类型、返回值、函数中指针类型进行声明。

(2) 总结

  1. 如果函数没有返回值那么应声明为void 类型;C语言中有一个规则,凡是不加返回值限定的函数,就会被编译器作为整型值处理。
  2. 如果函数无参数,那么应该声明其参数为void;如果我们所写的函数不接受任何参数,那么一定要指明其参数为void;如果函数的参数可以是任意类型指针,那么应声明其参数为void。
  3. 按照C标准规定,我们不能对void型指针进行运算,对有类型的指针进行算法操作的时候我们知道,因为其有具体所指向的类型,也就是对其所指向的数据类型为单位进行的;而void为空或者说无类型,所以就无法对其进行算法运算。
  4. void 不能代表一个真实的数据类型,因为void在C语言中解释为空,或者无类型,所以它当然无法代表一个真实的数据类型了。不过我们可以对其进行类型转换,这样它又可以变成各种各样的数据类型,所以我们可以将其理解成一个"抽象数据类型"。
2.3 派生类型
2.3.1 指针类型 (*)
2.3.2 数组类型 ([])
2.3.3 结构体类型 (struct)
2.3.4 共用体类型 (union)
2.3.5 函数类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值