-
共用体的作用就使不同的类型的变量共享同一个地址,好处是节省开销,缺点是同一时刻仅仅能存储一个成员。 共用体的大小是所有成员中占内存最长的长度,初始化时只能有一个常量。 结构体对象所占的空间大小涉及到一个字节对齐的问题。字节对齐的目的是让计算机快速读写,是一个以空间换取时间的方式。 结构体对象的大小= 最后一个成员的偏移量+最后一个成员变量的大小+填充字节 结构体做字节对齐的时候有这样一个准则:当前成员的偏移量必须是成员变量大小的整数倍,不是的话在后面填充字节。 最后还要判断结构体大小是不是成员中最大的整数倍不是的话还要填充。查看全部
-
wenku.baidu.com/view/af7b2718c850ad02df804129.html查看全部
-
左移:a左移N位就是将a*2 的N次方,左移后低位补4位0,高位舍弃4位; 常用的功能是实现2倍乘法,比运算速度高很多。 右移:实现除数为2的运算,最高位的符号根据符号位不同补充不同的位查看全部
-
预处理阶段,不会进行运算操作,只进行替换;在编译时,才进行运算; 若想得到预想结果,加()即可; 宏函数: 返回值类型 参数列表; 不考虑c的语法,不管什么类型,都当做字符串处理;查看全部
-
typedef的作用:重命名变量数据类型
语法:typedef [数据类型] [新的名字]
eg.typedef int * pointer;//将int * 的数据类型命名为pointer
typedef VS define:
①预处理时define定义的宏会替换,但typedef定义的别名不会替换。
②作用域不同
③通常用于给自定义数据类型其别名
size_t : unsigned long的别名
查看全部 -
预处理阶段工作:①将头文件展开直接放置到源文件中
②宏替换
③条件编译
注意:宏替换只是简单得字符串替换,且可以传递参数。
例如,#define N(n) n*10
int b = N(a); // 首先n替换成a,然后a*10。
易错:#define ADD(a,b) a+b
int c = ADD(a,b) * ADD(a,b);
/* 经过简单的替换会得到a+b*a+b,这显示不是我们想要的结果,因此加上括号保证优先级不会出错。*/
#define ADD(a,b) (a+b)
查看全部 -
1.递归:将一个问题规模为n的问题降为规模为(n-1)的问题,然后依次降低规模(层层往下),直至问题得到低规模的解,之后依次带入高规模的问题中(层层往上),最终得到规模为n解。 从n -> 1 -> n; 2.递推:先构造解决一个低的规模问题,然后依次(层层往上)推导出高规模的问题解。 从1 -> n;查看全部
-
结构体数据初始化 引用 及使用方法查看全部
-
^:按位异或<br> 应用:<br> 1.a^0xFF //定位反转<br> 2.数值交换:a = a^b; b = b^a; a = a^b; 原理:b = b^a^b -> a; a = a^b^a -> b;查看全部
-
&运算常应用: ·迅速清零 ·保留指定位 ·判断奇偶性 a & 1 = 1;则a为奇数 b & 1 = 0;则a为偶数查看全部
-
c语言常量分为直接常量和符号常量: #define 标识符 常量值(没有分号) 宏的本质是在预处理阶段发生的单纯的字符串替换(宏替换); 在预处理阶段,宏不考虑语法;查看全部
-
1.先验知识:a^a=0x0 ; x^0x0=x 2.推导: a1=a^b b1=a1^b=a^b^b=a a2=a1^b1=a^b^a=b查看全部
-
struct定义方式: 1. 定义类型 struct xx {}; 2. 定义类型并声明一个全局变量 struct xx {} xx_1; 3. 定义一个结构体 struct {} xx_1;查看全部
-
p=weapon_2而不是p=&weapon_2这部分是有难点的,数组的名字代表了这个数组的内存首地址,数组括号内的长度代表了数组的单元数,数据类型是int的话就按照int类型(32位系统上是4个字节)乘以单元数的长度,如果数据类型是结构体的话就按照结构体的长度乘以单元的长度。 总之数组名字代表了这个数组的内存首地址 p++,不是内存位置右移了一个字节,而是右移了一个单元长度的结构体weapon的内存长度。所以就不难理解为什么右移到了第二个结构体实例的首地址上了查看全部
-
左移:将数据对应的二进制值逐位左移若干位;高位丢弃,低位补零;乘以2的n次方 右移:将数据对应的二进制值逐位右移若干位:低位丢弃,高位补0或1(根据符号位判断,就是正数数补0,负数补1);除以2的n次方 高位丢弃,低位补零查看全部
举报
0/150
提交
取消