4、使用数组下标如果你想给一个变量设置一个代表某种意思的字符值 , 你可能会这样做:
switch ( queue ){case0 :letter = 'W';break;case1 :letter = 'S';break;case2 :letter = 'U';break;}或者这样做:
if ( queue == 0 )letter = 'W';elseif ( queue == 1 )letter = 'S';elseletter = 'U';一种更简洁、更快的方法是使用数组下标获取字符数组的值 。如下:
staticchar *classes="WSU";letter = classes[queue];5、使用别名考虑如下的例子:
void func1( int *data ){int i;for(i=0; i<10; i++){anyfunc( *data, i);}}尽管*data的值可能从未被改变 , 但编译器并不知道anyfunc函数不会修改它 , 所以程序必须在每次使用它的时候从内存中读取它 。如果我们知道变量的值不会被改变 , 那么就应该使用如下的编码:
void func1( int *data ){int i;int localdata;localdata = https://www.isolves.com/it/cxkf/yy/C/2020-02-27/*data;for(i=0; i<10; i++){anyfunc ( localdata, i);}}这为编译器优化代码提供了条件 。
6、局部变量的类型我们应该尽可能的不使用char和short类型的局部变量 。对于char和short类型 , 编译器需要在每次赋值的时候将局部变量减少到8或者16位 。
这对于有符号变量称之为有符号扩展 , 对于无符号变量称之为零扩展 。这些扩展可以通过寄存器左移24或者16位 , 然后根据有无符号标志右移相同的位数实现 , 这会消耗两次计算机指令操作(无符号char类型的零扩展仅需要消耗一次计算机指令) 。
可以通过使用int和unsigned int类型的局部变量来避免这样的移位操作 。这对于先加载数据到局部变量 , 然后处理局部变量数据值这样的操作非常重要 。无论输入输出数据是8位或者16位 , 将它们考虑为32位是值得的 。
考虑下面的三个函数:
int wordinc (int a){return a + 1;}short shortinc (short a){return a + 1;}char charinc (char a){return a + 1;}尽管结果均相同 , 但是第一个程序片段运行速度高于后两者 。
三、循环语句1、多重循环在多重循环中 , 如果有可能 , 应当将最长的循环放在最内层 , 最短的循环放在最外层 , 以减少 CPU 跨切循环层的次数 。例如示例 4-4(b)的效率比示例4-4(a)的高 :

文章插图
2、循环体内的判断如果循环体内存在逻辑判断 , 并且循环次数很大 , 宜将逻辑判断移到循环体的外面 。
示例 4-4(c)的程序比示例 4-4(d)多执行了 N-1次逻辑判断 。并且由于前者老要进行逻辑判断 , 打断了循环“ 流水线” 作业 , 使得编译器不能对循环进行优化处理 , 降低了效率 。
如果N非常大 , 最好采用示例 4-4(d)的写法 , 可以提高效率 。如果 N非常小 , 两者效率差别并不明显 , 采用示例 4-4(c)的写法比较好 , 因为程序更加简洁 。

文章插图
3、for 语句的循环控制变量不可在 for 循环体内修改循环变量 , 防止 for 循环失去控制。建议 for语句的循环控制变量的取值采用“ 半开半闭区间” 写法 。
示例 4-5(a)中的 x值属于半开半闭区间“ 0 =< x < N” , 起点到终点的间隔为 N , 循环次数为 N 。
示例 4-5(b)中的 x值属于闭区间“ 0 =< x <= N-1” , 起点到终点的间隔为 N-1 , 循环次数为 N 。
相比之下 , 示例 4-5(a)的写法更加直观 , 尽管两者的功能是相同的。

文章插图
4、更快的for()循环这是一个简单而高效的概念 。通常 , 我们编写for循环代码如下:
for( i=0;i<10;i++){ ... }i从0循环到9 。如果我们不介意循环计数的顺序 , 我们可以这样写:for( i=10; i--; ) { ... }这样快的原因是因为它能更快的处理i的值–测试条件是:i是非零的吗?如果这样 , 递减i的值 。对于上面的代码 , 处理器需要计算“计算i减去10 , 其值非负吗?如果非负 , i递增并继续” 。简单的循环却有很大的不同 。这样 , i从9递减到0 , 这样的循环执行速度更快 。
推荐阅读
- 女性外出时,如何保持安全9个技巧
- 崂山绿茶价格,购买崂山绿茶的技巧
- 口红花养护技巧
- 淘宝论坛发帖置顶的七个技巧 淘宝怎么发帖子
- 小罐茶滇红的价格是多少,正山小种茶的冲泡技巧
- 淘宝直播间冲榜小技巧 淘宝直播权重排名靠前是怎么做到的
- 可乐姜汤,红茶的调饮及冲泡技巧
- 水疗会所装修设计技巧
- 超级推荐优化目标选哪个 超级推荐设置技巧
- 面对 MySQL 查询索引失效,程序员的六大优化技巧!
