C语言

来源:互联网 发布:nginx websocket 转发 编辑:程序博客网 时间:2024/06/03 18:10

C语言中提供了许多的数据类型,如下图所示:

这里写图片描述

c语言为什么要引入这么多的数据类型呢?因为C语言归根结底只是一门编程语言,一种让计算机为我们做事情的工具。引入这么多的数据类型是为了更加方便的表现现实世界中事物。

1.什么是数据类型?

C语言为我们提供了int, float等基本数据类型,这些都是表示基本数据用的。然而C语言也为我们提供了复杂的数据类型,比如struct, union等。这些可以由基本数据类型抽象组合而成,可以对应现实世界的任何抽象事物,方便我们编写程序。
那我们怎么去理解数据类型。我们通常用一个数据类型,比如int 去定义一个变量,就像这样:
int a;
其实我是这么认为的,就像数学里面的“设”一样,设出一个未知数a,当然我们也可以为它设置初始值。然后我们就可以使用这个a了,因为a是没有但是我们要用到的,所以要先声明。至于要用那种数据类型完全取决于自己的需求。

2.数据类型的本质是什么?

其实数据类型的本质就是“固定内存块大小的别名”,为什么这么说呢?我们可以做一个测试用例:
#include <stdio.h>#include <stdlib.h>int main() {    printf("sizeof(int) : %d\n", sizeof(int));    printf("sizeof(float) : %d\n", sizeof(float));    printf("sizeof(double) : %d\n", sizeof(double));    printf("sizeof(long) : %d\n", sizeof(long));    printf("sizeof(char) : %d\n", sizeof(char));    system("pause");    return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:
sizeof(int) : 4
sizeof(float) : 4
sizeof(double) : 8
sizeof(long) : 4
sizeof(char) : 1

从上面的测试来看,各种数据类型的大小都是固定的,我们声明变量的时候就是在告诉编译器我要申请这么大的一块内存,而这块内存的标号就是这个变量的名字。所以变量和内存是两码事,我们是通过变量向内存里边读写数据而不是向这个变量在读写数据。
学习C语言最重要的就是要搞懂内存的概念,C语言与其他高级语言比如C#,Java不同,C语言是弱类型的语言,对数据类型没有那么严格的检查。所以自己要务必分清楚数据类型和变量的关系,往往就是因为概念不清晰而导致BUG。



C语言中,只是能够明确sizeof(short<sizeof(long),sizeof(short)≤sizeof(int)≤sizeof(long)而已,至于的int具体是16位还是32位的,取决于平台和语言实现(编译器)。在VC++(x86)等32位环境中,int和long都表示32位有符号整数,范围是一样的。