【C语言基础】-数据类型大小

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、基本数据类型
    • 整型
    • 字符型
    • 实型(浮点型)
  • 二、构造数据类型
    • 数组类型
    • 结构体类型
      • 结构体匿名声明
      • 结构体对齐方式
    • 共用体(联合)类型
      • 共用体(联合体)大小
    • 枚举类型
  • 三、指针类型
  • 四、空类型


前言

c语言的数据类型如下图所示:
【C语言基础】-数据类型大小_第1张图片

一、基本数据类型

基本数据类型最主要的特点是其值不可以再分解为其它类型。也就是说,基本数据类型是自我的说明。

整型

整型可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。包括整型常量和整型变量,整型变量又包括短整型、基本整型、长整型,它们都分为有符号和无符号两种版本,是一种智能的计算方式。

短整型:short int  (2字节) (-32768~32767)
整型:  int        (2字节) (-32768~32767)
长整型:long int   (4字节)(-2147483648~2147483647)
长长整型:long long  (8字节)-9223372036854775808~+9223372036854775807(约九百亿亿)
长长整型:__int64    (8字节)-9223372036854775808~+9223372036854775807
短整型:unsigned short int (2字节) (0~65535)
整型:  unsigned int 	  (2字节) (0~65535)
长整型:unsigned long int  (4字节) (0-4,294,967,295)
长长整型:unsigned  long long  (8字节) 0~18446744073709551615
长长整型:unsigned  __int64    (8字节) 0~18446744073709551615

字符型

包括中文字符、英文字符、数字字符和其他ASCⅡ字符,其长度(即字符个数)范围是0-255个字符,即0x00至0xFF。

字符型:char (1字节) (-128~127)
字符型:unsigned  char (1字节) (0~255)

实型(浮点型)

实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式,指数形式。

单精度型:float  (4字节)(3.4E-38~3.4E+38)(7位有效数字)
双精度型:double (8字节)(1.7E-308~1.7E+308)(16位有效数字)
长双精度型:long double (10字节)(19位有效数字)

二、构造数据类型

构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种:

数组类型

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。

int a[10] = { 1, 2 };     // 气他元素初始化为0
char b[10];		//局部变量随机数,全局变量为0
int c[20] = { 0 };   // 编译器在编译的时候就已经确定了所有元素的值为0

例:c是数组首元素的地址, &c是整个数组的地址
c+1 往后是跳4个字节 &c+1 往后跳80个字节

结构体类型

结构体是一个聚合数据类型;将相同或不同类型的元素放到一起,结构体内存布局和数组基本一致,结构体内部第一个成员变量的地址最低;

struct A
{
  int a;
  char b[20];
  short c;
};//分号不能丢

struct A为结构体名,{ }内为成员变量,}后必须加;
其他形式的结构体声明

结构体匿名声明

struct
{
    int a;
    char b;
    float c;
}A;//A 为结构体变量 使用需要重新命名
struct
{
    int a;
    char b;
    float c;
}a[20],*p;//a[20]为结构体数组,p为结构体指针,指向结构体
struct Node
{
  int data;
   A a;//结点
};

结构体对齐方式

#pragma pack(8)//设置最大对齐数
struct A
{
    char c1;//1
    int i;//4
    char c2;//1
};//分号不能丢1+3+4+1+3
#pragma pack()
#pragma pack(1)
struct B
{
   char c1;//1
    int i;//4
    char c2;//1
};//分号不能丢1+4+1

上面两段代码 成员变量类型完全相同,struct A 大小是12,struct B大小是6

共用体(联合)类型

结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

//先定义共用体类型,在定义共用体变量
union data
{
    int m;
    float x;
    char c;
};

union data a, b;
//定义共用体类型的同时定义共用体变量
union data
{
    int m;
    float x;
    char c;
}a, b;
//直接定义共用体变量
union 
{
    int m;
    float x;
    char c;
}a, b;

共用体(联合体)大小

共用体的大小就是最宽基本成员大小,但是要整除最宽基本成员大小。

// An highlighted block
union str
{
    char c[13];
    int m;
};

共用体大小str为16

枚举类型

枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。

typedef enum 
{
    SPRING("春天"),
    SUMMER("夏天"),
    FALL("秋天"),
    WINTER("冬天");
}eSeason;
eSeason season;

三、指针类型

指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。

64位处理器上64位操作系统的64位编译器,指针大小8字节。

64位处理器上64位操作系统的32位编译器,指针大小4字节。  

64位处理器上32位操作系统的32位编译器,指针大小4字节。

32位处理器上32位操作系统的32位编译器,指针大小4字节。

四、空类型

调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。

函数头为:int max(int a,int b);其中“int ”类型说明符即表示该函数的返回值为整型量。
函数头为:void max(int a,int b);其中“void”类型说明符即表示该函数的返回值为空类型。

1.C中规定void类型的指针可以强制转化为任意的其他类型指针使用。
2.Visual Studio中每个空类型的实例占用1字节的空间。

你可能感兴趣的:(c语言,stm32)