C语言 小知识!~

来源:互联网 发布:宁波seo招聘 编辑:程序博客网 时间:2024/05/02 03:02

1.表达式的求值:

初始值: x = 1, y = 1 ,z = 1

求:++x || ++y && ++z

 

答:  从左到右顺序依次求值, 1(TRUE).

 

注意:  因为||操作符的左操作数是TRUE,所以没有必要求值了.事实上C语言肯定不会继续求值 --  有关规则,在按从左到右的顺序对一个逻辑表达式求值的时候,只要知道了它的实际结果,就不会对其余部分求值.  这意味着y和z的值仍将是1.  

 

PS. 逻辑操作符的副作用:C语言里的逻辑表达式的求值有一定的难度,因为是否需要对逻辑操作符的右操作数求值取决于其左操作数的求值结果.如果右半部分隐藏了副作用,就会留下隐患,副作用可能也可能不发作.一般来说,谨慎对待副作用是没错的.

 

 

2.整数和浮点的转换:

int i, long l, float f, double d;

求: i = l = f = d = 100/3.  

printf("%.8g/n",i,l,f,d);        //都以同样格式输出            

 

答: 从右到左依次求值.  

d = 33.333333   (double型)

f = 33.33333x   (float型)    注意: "%.8g"最多输出前8位数字,在Intel 8086和Motorola68000机器上,7位数字是float的精确度极限,第8位不可靠

l = 33    (长整形)

i = 33    (整数)

 

d= f = l = i =(double)100/3     注意: 类型转换优先级要高于"/"

所以

i= int(33.333333) = 33

3.预处理文件

#include "defs.h"

在编译程序的时候,预处理会把这条语句替换成defs.h中的内容,使得defs.h文件里的定义在这程序中生效.

 

 

4.编程风格

 (1).if else嵌套的改善

 

 

5.存储类

   更多函数时变量存储的分析:

看看上面这代码输出的是什么,好好分析下!!!

结果:   i = 1  j = 1

          next(i) = 1

          last(i) = 10

          new(i+j) = 12

          i = 1  j = 2 

          next(i) = 2

          last(i) = 9

          new(i+j) = 13

          i = 1  j = 3

          next(i) = 3

          last(i) = 8

          new(i+j) = 14

extern语句编译器表明: i是一个在其他地方(可能是另一个文件)定义的外部变量.

文件开始就定义的变量: 对外部变量进行的定义.看似可能会跟别的外部同名变量相冲突,但如果在这变量前加个保留字static,它向编译器表明:这个变量作用域仅限于本文件

6.难解的指针

如果能正确的答对这道谜题,说明已经全面掌握了C语言里的指针的用法,试试看吧!!!

 

结果:  

    c : 以char指针为元素的数组(画图帮助理解)

   cp: 以char指针的指针为元素的数组

  cpp: 指向一个char指针的指针

           指向 "POINT" 的指针即c[2]

           指向 "ENTER"中"TER"的指针 即c[0]+3

           指向 "FIRST" 中 "ST"的指针  即c[3]+3

           指向 "NEW"  中 "EW"的指针  即c[1]+1 

原创粉丝点击