C语言数据模型

C语言数据模型

计算输出所含字符数的C语言程序

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main()
{
int num;//声明变量的类型
num = 0;//初始化num为0
while (getchar() != EOF)//使用getchar一次读入一个输入字符
++num; /* add 1 to num *///在每次字符读入后递增num变量,知道没有输入字符可供读入为止。EOF会提示文件已达末尾。
printf(“%d\n”,num);//将num的值以十进制整数之后加上换行符的形式打印出来
}

C语言类型系统

静态部分

主要描述了数据可能拥有的值。
类型系统包含整数这样的基本类型以及一些类型构成规则,利用这些规则可以用一直的类型逐步构建更加复杂的类型。

  • 字符(char, signed char, unsigned char)
  • 整数(int, short int, long int, unsigned)
  • 浮点数(float, double, long double)
  • 枚举(enum)

其中整数和浮点数是算术类型。

可以使用基本类型或使用这些规则构建好的其他类型。

  • 数组类型
    数组可由字符,算术类型,指针,结构体,共用体或其他数组构成

  • 结构体类型
    结构体是由称为成员或字段的变量构成的分组。在结构体中,不同的成员可以具有不同的类型,但是每个成员都必须具有某一个类型的元素。
    T1…Tn是类型,M1…Mn是成员名称

    1
    2
    3
    4
    5
    6
    7
    struct S{
    T1M1;
    T2M2;
    T3M3;
    ……
    TnMn;
    }
  • 共用体类型
    共用体类型允许一个变量在程序执行的不同时期具有不同的类型。
    声明:

    1
    2
    3
    4
    5
    6
    7
    union {
    T1M1;
    T2M2;
    T3M3;
    ……
    TnMn;
    }x;

定义了变量x,可以存放类型为T1…Tn中任意一种的值,成员名称M1…Mn用来指示x的值现在应该是哪种类型。也就是说,x.Mi就表示x的值是类型Ti的值。

  • 指针类型
    指针类型的变量包含在某个存储区域的地址,可以通过指针间接的访问另外一个变量。声明T *p;
    获取对象的地址用&p = &x
    将x的地址赋值给p。就是让p指向x,用在p前面的*会获取p指向的框的值。

C语言的typedef结构可用来创建类型名称的同义字。
typedef <类型描述符> T

函数
如果函数没有返回值,那么该函数类型就是void类型的。一般情况下,可以应用类型构成规则任意地构建类型,不过也存在一些限制,比如,不能构建“函数数组”,不过构建由指向函数的指针构成的数组是可以的。

动态部分

对数据进行的操作

  • 创建或销毁数据对象的操作
    对于数据的创建,C语言提供了几种简陋的机制,在函数被调用时,会创建对应每个局部参数的框,这些框都用来存放参数的值。

另一种数据创建机制就是使用程序库例程malloc(n),该例程可以返回一个指针,指向n个未使用的连续字符位置,这些存储空间可以被malloc的调用者用来存储数据,餐后就可以在这一存储区域中创建数据对象。

C语言有着类似的方法来销毁数据对象,当函数返回时,该函数调用的局部参数将不服村组,例程free会释放malloc创建的存储空间,特别要说的是,使用free(p)的效果是释放p指向的存储区域,若使用free去销毁不是通过调用malloc创建的对象,会造成灾难性后果。

  • 访问或修改数据对象某些部分的操作
    C语言具有访问对象某些部分的机制,可以使用a[i]访问数组a的第i个元素,用x.m访问结构x的成员m,还可以用*p访问指针p指向的对象。
    在C语言中,修改(或者说是写)值主要是赋值运算符完成的,这让我们可以改变对象的值。

  • 将若干数据对象的值组合起来,为某个数据对象生成新值的操作
    1.算术运算符
    2.逻辑运算符
    3.比较运算符
    4.位运算符
    5.赋值运算符
    6.强制转换运算符

解释C语言程序的标识符与名字(用于“框”或数据对象)之间的区别

标识符是在程序中自定义的一些符号和名称。比如NULL,EOF,TRUE,FALSE。
要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的。标识符有预定义标识符和已定义标识符。
名字是自己定义的,是C语言标识符的一种

举例说出有多个名字的C语言数据对象

如果熟悉C语言之外的编程语言,描述一下它的类型系统和操作