C语言简介——数据类型

 2024-01-27 01:04:47  阅读 0

前言

Goh,智能硬件开发人员,拥有多年C语言编程经验。 这是同学写的《C语言入门》系列的第一篇文章。 首发于知乎专栏@Goh。

同学的加入无疑是令人兴奋的,也给我们带来了新的视角。 希望不断壮大的编辑团队能给大家带来更多更精彩的硬核内容分享。

众所周知,它又被称为“胶水语言”,提供了多种编程语言的扩展实现,具有出色的灵活性和广泛的应用场景。 尤其是&C提供的高性能解决方案在金融行业、大数据和人工智能领域独树一帜,执行效率不亚于C语言,逻辑实现更简单高效。 因此,如果你已经有了一定的掌握,不妨学习一下C语言以及两者的结合。

C语言数据类型

数据类型,即数据对象的类型,是编程语言的基石。 数据类型自编程语言发明以来就已经存在,其最初的目的是为了让程序能够更充分地利用稀缺的内存空间。

如今,硬件行业严格遵循摩尔定律多年后,开发者可以享受充足的内存资源,同时数据类型也被赋予了更深层次的含义:

:基本整型数据对象占用4 Bytes(32 Bits)内存空间,取值范围为0x0~FFFF,可以进行余数计算。

注意:需要注意的是,除了C语言本身的常规定义外,类型数据对象占用的内存空间和数值范围也可能受到编译器的影响。

C语言4种大数据类型:

c语言中基本数据类型_c语言数据类型中的基本类型_c语言的数据基本类型分别为

常量和变量

在C/C++中,数据有两种表达形式:“常量/变量”。 首先,什么是常数? 什么是变量?

常量:指在程序运行过程中其数据值不能改变的量。 例如

变量:代表一个具有名称和特定属性的存储空间。 这个存储空间中的数据值可以在程序运行时改变。 变量具有以下三个要素:

基本数据类型

基本数据类型列表,如下图:

c语言中基本数据类型_c语言的数据基本类型分别为_c语言数据类型中的基本类型

:创建一个基本整型变量

  1. // 声明定义并初始化一个「有符号」基本整型变量 aInt ,初始化为 1

  2. int aInt = 1;

  3. // 声明定义并初始化一个「无符号」基本整型变量 uaInt ,初始化为 1

  4. unsigned int uaInt = 1;

无符号数据类型和有符号数据类型的区别:

:如果char和char都占用1Byte的内存空间。 char的数值范围是-128~127,char的数据范围是0~255。 这是因为有符号数据类型数据的最高位被用作符号位,而无符号数据类型数据的最高位被用作数据位。

派生数据类型数组

定义:具有相同数据类型并按一定顺序排列的变量的集合。

特征:

创建一维数组的语法格式:

  1. // 其中 [] 为下标运算符

  2. 数据类型 数组名[常量表达式]

  1. // 例:创建 1 维数组:

int aArray[5] = {1, 2, 3, 4, 5}

笔记:

  1. // 正确用法:一次只能使用数组中的单个元素。

  2. // 将 aArray 的数据复制到 bArray 中。

  3. int aArray[5] = {1, 2, 3, 4, 5};

  4. int bArray[5] = {0};

  5. for(int i = 0; i < 5; i++)

  6. {

  7.    bArray[i] = aArray[i];

  8. }

  9. // 错误用法:

  10. int aArray[5] = {1, 2, 3, 4, 5};

  11. int bArray[5] = {0};

  12. bArray = aArray;    //不可给整个数组赋值

注意:需要注意的是,在使用数组时,需要主动对数组变量进行边界检查。 C/C++在编译过程中没有默认的边界检查动作,因此当程序运行过程中数组下标索引值越界时,不会立即触发错误,存在潜在的逻辑风险例外情况。

  1. // 如下例所示,aArray[i*j] 在程序进行过程中,下标会超出其数组大小。

  2. // 但是在编译和运行过程中,并不会报错,因此必须由编程人员对此边界进行处理!

  3. int main(void)

  4. {

  5.    int i, j;

  6.    int aArray[5] = {1, 2, 3, 4, 5};

  7.    for (i = 0; i < 5; i++)

  8.    {

  9.        for (j = 0; j < 5; j++)

  10.        {

  11.            aArray[i * 5 + j] = i * 5 + j;

  12.            printf("aArray[%d]=%d\r\n", i * 5 + j, aArray[i * 5 + j]);

  13.        }

  14.    }

  15.    return 0;

  16. }

  17. // 上错误示例可改为:

  18. // 当然像示例中的简单数组越界在编程过程中是十分容易避免的,但对于复杂度高的问题,必须是要增加边界检查的。

  19. int main(void)

  20. {

  21.    int i, j, idx;

  22.    int aArray[5] = {1, 2, 3, 4, 5};

  23.    for (i = 0; i < 5; i++)

  24.    {

  25.        for (j = 0; j < 5; j++)

  26.        {

  27.            idx = i * 5 + j;

  28.            if (idx > sizeof(aArray) / sizeof(int))

  29.            {

  30.                printf("Err: idx over range!\r\nMax idx = %d,idx=%d\r\n", sizeof(aArray) / sizeof(int), idx);

  31.                return 0;

  32.            }

  33.            aArray[idx ] = idx ;

  34.            printf("aArray[%d]=%d\r\n", idx , aArray[idx]);

  35.        }

  36.    }

  37.    return 0;

  38. }

c语言数据类型中的基本类型_c语言中基本数据类型_c语言的数据基本类型分别为

结构

定义:由一系列具有相同或不同数据类型的变量组成的集合。

自定义结构体数据类型语法格式:

  1. // struct 关键字用于定义结构体数据类型

  2. struct 结构体名称

  3. {

  4.    数据类型 成员名1;

  5.    数据类型 成员名2;

  6.    ...

  7.    数据类型 成员名N;

  8. };

  1. // 定义一个 student 结构体类型

  2. // 此时只是声明定义了一个结构体类型,并非实际创建了一个结构体类型变量

  3. struct student

  4. {

  5.  int num

  6.  char name[20];

  7.  float score;

  8. }

创建结构类型变量的 3 种方法:

  1. // 例:在定义了 student 结构体类型的同时,

  2. // 也创建了 zhao, wang, li 三个 student 型的结构体变量。

  3. struct student

  4. {

  5.  int num

  6.  char name[20];

  7.  float score;

  8. }zhao, wang, li;

  1. // 声明定义

  2. struct student

  3. {

  4.  int num

  5.  char name[20];

  6.  float score;

  7. };

  8. // C++ 中,struct 关键字可省略,而 C 中,struct 关键字不可省略

  9. struct student zhao, wang, li;  

  1. // 注意,由于省略了结构体类型名,因而以后不能再用该结构类型创建其他不同的变量

  2. struct

  3. {

  4.   int num

  5.   char name[20];

  6.   float score;

  7. }zhao, wang, li;  

访问结构体成员:

  1. // 句点符号 "." 作为成员运算符,用于访问一个结构体变量中的某个成员

  2. // 结构体变量名.成员名

  3. zhang.name

财团

定义:联合体也称为联合体,可以使用多个不同类型的变量共享同一内存空间。

自定义联合类型的格式:

  1. union 联合体类型名

  2. {

  3.  数据类型 成员名1;

  4.  数据类型 成员名2;

  5.  ...

  6.  数据类型 成员名n;

  7. };

  1. // 创建联合体类型变量 SizeUnion

  2. union SizeUnion

  3. {

  4.    char a8;

  5.    int  b32;

  6.    long int c64;

  7. };

创建联合类型变量:

  1. SizeUnion TransDatas;

访问联合变量成员的语法格式:

  1. 联合体成员.成员名    // 联合体变量

  2. 联合体成员->成员名   // 指向联合体类型的指针变量

:声明并定义一个联合类型,创建一个联合类型变量,然后给该变量的成员赋值。

  1. union SizeUnion

  2. {

  3.    char a8;

  4.    short int b16;

  5.    int c32;

  6. };


  7. SizeUnion TransDatas;


  8. int main(void)

  9. {

  10.    TransDatas.c32 = 0x90987654;

  11.    printf("Part1: Set TransDatas.c32 = 0x90987654\r\n");

  12.    printf("TransDatas.c32 = 0x%x\r\n", TransDatas.c32);

  13.    printf("TransDatas.b16 = 0x%x\r\n", TransDatas.b16);

  14.    printf("TransDatas.a8 = 0x%x\r\n\r\n", TransDatas.a8);


  15.    TransDatas.b16 = 0x1111;

  16.    printf("Part2: Set TransDatas.b16 = 0x1111\r\n");

  17.    printf("TransDatas.c32 = 0x%x\r\n", TransDatas.c32);

  18.    printf("TransDatas.b16 = 0x%x\r\n", TransDatas.b16);

  19.    printf("TransDatas.a8 = 0x%x\r\n\r\n", TransDatas.a8);


  20.    TransDatas.a8 = 0x22;

  21.    printf("Part3: Set TransDatas.a8 = 0x22\r\n");

  22.    printf("TransDatas.c32 = 0x%x\r\n", TransDatas.c32);

  23.    printf("TransDatas.b16 = 0x%x\r\n", TransDatas.b16);

  24.    printf("TransDatas.a8 = 0x%x\r\n\r\n", TransDatas.a8);


  25.    return 0;

  26. }

输出结果:

笔记:

枚举类型

定义:整型常量的集合,列出了可以访问的值的范围。 所谓“枚举”,就是将可能的值一一列出。

自定义枚举类型语法格式:

  1. // enum 关键字用于定义枚举类型

  2. enum 枚举类型名

  3. {

  4.  枚举元素1[=整型常量1],

  5.  枚举元素2[=整型常量2],

  6.  ...

  7.  枚举元素n[=整型常量n]

  8. };

创建枚举类型变量的语法格式:

  1. enum 枚举类型名 枚举变量名;

  1. // 创建枚举类型 Statusenum

  2. enum Statusenum

  3. {

  4.    A_Status = 1,

  5.    B_Status = 2,

  6.    C_Status,

  7.    D_Status,

  8.    E_Status,

  9. };

  10. int main(void)

  11. {

  12.    Statusenum Status;   // 创建 Statusenum 枚举类型变量 Status


  13.    Status = A_Status;

  14.    printf("Status = %d, A_Status = %d\r\n", Status, A_Status);


  15.    Status = B_Status;

  16.    printf("Status = %d, B_Status = %d\r\n", Status, B_Status);


  17.    Status = C_Status;

  18.    printf("Status = %d, C_Status = %d\r\n", Status, C_Status);


  19.    Status = D_Status;

  20.    printf("Status = %d, D_Status = %d\r\n", Status, D_Status);


  21.    Status = E_Status;

  22.    printf("Status = %d, E_Status = %d\r\n", Status, E_Status);


  23.    return 0;

  24. }

输出结果:

c语言的数据基本类型分别为_c语言数据类型中的基本类型_c语言中基本数据类型

笔记:

指针类型

定义:

创建指针变量的语法格式:

  1. // 指针变量的定义

  2. 数据类型 *指针变量名;

  1. char *p;

  2. // 星号 "*" 表示,其后面的名字是一个指针变量名。即:p 为指针变量名。

  3. // char 表示,该指针变量 p 的数据类型为字符型。

引入指针后,C/C++中访问变量数据值的方式有两种:

与指针运算相关的运算符有两种类型:

1::

  1. // 创建整型指针变量 p

  2. int *p;


  3. // 创建整型变量 a,并初始化数据只为 2

  4. int a = 2;        // 假定变量 a 的存储地址为 0x8000


  5. //获取整型变量 a 的存储地址,并将该地址赋值给指针变量 p。

  6. p = &a;    
       

// // 结果为:指针变量 p 存储了变量 a 的地址,即 0x8000。

  1. // 之后就可以根据需要,通过 *p 的形式来间接访问变量 a 的数据值 2 了

2:

  1. // p,表示指针变量,指向存储空间的地址

  2. // *p,指针变量 p 所指向的存储空间的数据值

  3. // &p,指针变量 p 所占用的存储空间的地址


  4. int main(void)

  5. {

  6.    // 创建 int 类型的变量 a , 并对其进行初始化赋值为 2;

  7.    int a = 2;    

  8.    // 创建 int 类型的指针变量 p ,并将其初始化,指向变量 a 的内存地址

  9.    int *p = &a;    
       

  10.    // 输出变量 a 的地址

  11.    printf("a's Address = 0x%x.\r\n", &a);    

  12.    // 输出变量 a 的值

  13.    printf("a = 0x%x.\r\n", a);                

  14.    // 输出指针变量 p 的地址

  15.    printf("p's Address = 0x%x\r\n", &p);    

  16.    // 输出指针变量 p 的值

  17.    printf("p = 0x%x\r\n", p);            

  18.    // 输出指针变量 p 所指向的内存单元的值

  19.    printf("*p = 0x%x\r\n", *p);    

  20.    // 输出指针变量 p 指向的内存单元数据的存放地址,即变量 a 的地址

  21.    printf("&(*p) = 0x%x\r\n", &(*p));    

  22.    // 输出变量 a 的内存地址指向的数据值,即变量 a 的值

  23.    printf("*(&a) = 0x%x\r\n", *(&a));


  24.    return 0;

  25. }

输出结果:

c语言中基本数据类型_c语言数据类型中的基本类型_c语言的数据基本类型分别为

注意:从上面的例子可以看出,值运算和地址运算互为逆运算。

空类型

定义:代表未知类型,不能代表真实变量。

影响:

  1. void n;    // 错误,不能表示真实的变量。

  2. void nFunction(void);    // 正确。

  3. void xFunction(char n);    // 正确。

void类型指针(void *):表示未知类型的指针,可以指向任何类型的变量。

吴秀华

物联网和智能硬件浏览器

标签: 变量 类型 语法

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码