一、数据类型
1.概述
C语言包含的基本数据类型如下表:
类型 | 类型标识符 | 字节 | 数值范围 |
---|---|---|---|
整型 | int | 4 | -2147483648~2147483647 |
短整型 | short | 2 | -32768~32767 |
长整型 | long | 4 | -2147483648~2147483647 |
字符型 | char | 1 | -128~127 |
单精度型 | float | 4 | 3.4*10^(-38)~3.4*10^(38) |
双精度型 | double | 8 | 1.7*10^(-308)~1.7*10^(308) |
数据类型就相当是一个模子,short、int、long、char、float、double是基本数据类型,比如定义了一个int型的数据,就在内存空间里分配一个4字节的空间用来存放这个数据,而且编译器认为这个空间里放的是一个整数。
2.举例
int i = 1;
char c = 'a';
float f = 1.1;
就相当于分别分配了4个字节的空间来存放1,1个字节的空间来存放a,4个字节的空间来存放1.1。
二,变量
1.概念
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。
2.命名规则
(1)变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线“_”组成;最后一个字符可以是类型说明符;
(2)变量名的长度不得超过255个字符;
(3)变量名在有效的范围内必须是唯一的。有效的范围就是引用变量可以被程序识别、使用的作用范围——例如一个过程、一个窗体等等。有关引用变量作用范围的内容,将在以后介绍。
(4)变量名不能是VB中的保留字(关键字),也不能是末尾带类型说明符的保留字,但可以把保留字嵌入变量名, 关键字是指VB6语言中的属性、事件、方法、过程、函数等系统内部的标识符。如已经定义的词(if、endif、while、loop等)、函数名(len、format、msgbox等)。像Print、Print$是非法的,而Myprint是合法的。 例如: strName1,intMax_Length,intLesson,strNo3等是合法的变量名,而A&B,all right,3M,_Number等是非法的变量名。
三,内存布局
概述:正在运行的C语言程序占用的内存分为代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。
- 代码区(text segment)。存放CPU执行的机器指令(machine instructions)。通常,代码区是可共享的(即另外的执行程序可以调用它),因为对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。
- 全局初始化数据区/静态数据区(initialized data segment/data segment)。该区包含了在程序中明确被初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)和常量数据(如字符串常量)。
- 未初始化数据区。亦称BSS区(uninitialized data segment),存入的是全局未初始化变量。BSS这个叫法是根据一个早期的汇编运算符而来,这个汇编运算符标志着一个块的开始。BSS区的数据在程序开始执行之前被内核初始化为0或者空指针(NULL)。
- 栈区(stack)。由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储到栈区。然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间,这就是C实现函数递归调用的方法。每执行一次递归函数调用,一个新的栈框架就会被使用,这样这个新实例栈里的变量就不会和该函数的另一个实例栈里面的变量混淆。
- 堆区(heap)。用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。
四、指针基础
1.概念
在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。
2.实例
int *i = 1;
我的理解是i是一个地址,*i则是这个地址里的值,为1。
3.指针的初始化
对指针进行初始化或赋值只能使用以下四种类型的值:
- 0 值常量表达式,例如,在编译时可获得 0 值的整型 const对象或字面值常量 0。
- 类型匹配的对象的地址。
- 另一对象末的下一地址。
- 同类型的另一个有效指针。