(4)枚举类型 例:enum spectum{red,orange,yellow=78,green,blue,violet,indigo,ultravolet}; sptctrum band ;//定义枚举变量band 1.默认情况下,枚举量的数值是从0开始的整数值。但一旦有一个枚举量别赋初始化,后面的枚举量的值比前面的枚举量的值大1.枚举量的值可以相同。 (可以将 int 或 long 类型的枚举量) 2.再不进行强制转换的情况下,只能将定义枚举时使用的枚举量赋给变量。 如:band = blue ;合法 band = 1001 ;不合法 3.枚举变量只能是枚举量的赋值运算,或者是通过强制转换为枚举量类型后赋值,本身没有算术运算 如:band=red ;合法 band = red + yellow ; 不合法 //int值不能赋值给枚举变量 band =spectum(red + yellow );合法//强制转化为枚举类型 4.枚举的范围: a.每个枚举斗殴取值范围,通过强制转换,可以将取值范围中的任何整数值赋值给枚举变量,即使这个值不是枚举值 b.枚举范围上下限: 上限:为先找到枚举量的最大值,再找到大于这个最大值的,最小的2的幂,减去1。如:最大枚举值 = 101 ;最大幂 = 128;上限 = 128-1=127;
4.指针和自由存储空间 (1)常规变量 int ,char 等,值是定指的量,而地址为派生量。而指针恰好相反,地址是指定的量,值是派生的量。 (2)指针或者说是地址的长度既不能指示关于变量的长度或类型的任何信息,也不能指示该地址上有什么建筑物。一般来说,地址需要2个或4(32位操作系统) 个字节,取决于计算机系统。 (3)在创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针指向的数据的内存。因而在对指针解除引用操作符(*)之前,将指针初始化 一个确定的合适的地址。 (4)指针地址: int *pt; pt = ( int * )0xB8000000 // 把八进制的地址值强制转换为 整型指针,与指针类型相匹配。c语言可以不用转换,但c++需要转化,否则报错。 (5)指针的意义:在运行阶段分配未命名的内存以存储,在这种情况下,只能用指针来访问内存。(new 动态链接) typeName pointer name = new typeName 说明两点:用来指定需要什么样的内存,和用来声明合适的指针。 如:int *p = new int ;// allocate space for an int (6)内存耗尽 当计算机没有足够的内存而无法满足new的请求。new返回0 即空指针,如果成功,返回有用的指针。 (7)使用delete来释放内存 int *ps = new int ; delete ps ; // 完成指针操作后及时释放ps所指向的内存,但不会删除指针ps本身。可以将ps指向另一个新的内存空间。new 和 delete要配对使用。否则泄露。 (8)使用new 和 delete 的规则 a. 不要尝试释放已经释放的内存块,不要使用delete来释放声明变量所获得的内存,只能释放new分配的内存,不过对null 是安全的。 如:int guys = 5 ;int *p =&guys ;delete p ;错误,声明变量不得释放。 b.静态联编:在编译时给数组分配的内存,意味着数组是在编译时加入程序中的. 动态联编:在运行过程中选着数组的长度。 c.如果使用 new [] 为数组分配内存,则应使用 delete[] 来释放。 d.如果使用 new [] 为一个实体分配内存,则应使用 delete (没有括号)来释放。 e.数组分配内存的通用格式: type_name pointer_name = new type_name [ num_elements ] (9) 指针,数组,和指针算术 arrayname[ i ] = *(arrayname + i ) ; A. 指针名 和数组名 的异同点: 相同点:可以使用数组方括号的方式表示法。也可以使用解除引用操作符(*) 不同点:可以修改指针的值,而数组名是常量。 对数组sizeof 是数组的长度。(数组元素的个数)而指针是指针的长度,及时指针指向的是一个数组。(32位中4个字节) B.在cout和多数c++中,char 数组名, 指向char 的指针,以及用双引号括起来的字符串常量都被解释字符串第一个字符的地址。 C . const char * bard = "wren"; 字符串字面值是常量,即使用const 的原因。可以使用const意味着可以用bard 来访问字符串,但是不鞥修改它。 D.字符串复制函数原型 : strncpy (array_name1 , array_name2, cpy_num ); F .创建动态结构时,不能将成员操作符句点用于结构名,因为这种结构没有名称,指示知道他的地址。应该是另一种操作符:箭头成员操作符(->) a.简而言之:如果结构标示符是结构名,则使用句点操作符;如果标示符是指向结构的指针,则使用箭头操作符。 b.另一种访问结构成员的方法,如果ps是指向结构的指针,则*ps 就是被指向的值 即结构本身 int *ps = struct_name; ( * ps ).stuct_member ;
|