现在的位置: 首页 > 综合 > 正文

看书笔记

2014年02月17日 ⁄ 综合 ⁄ 共 1361字 ⁄ 字号 评论关闭

1 , 用按位异或操作可实现不用第3个临时变量交换两个变量的值:

     a ^= b; b^ = a; a ^= b; 或 a ^= b ^= a;

    注: 只能对int,char..

    但并不推荐这样做, 因为这样的代码读起来很费劲.

 

     还有一种方法,用算法方法:

      a = a + b; b = a - b; a = a - b;

 

2,  ++ , -- 操作符

    这绝对是一对让人头疼的兄弟。先来点简单的:
    inti=3;
   (++i)+(++i)+(++i);

    表达式的值为多少?15吗?16吗?18吗?其实对于这种情况,C语言标准并没有作出
    规定。有点编译器计算出来为 18,因为 i经过 3次自加后变为 6,然后3 个6 相加得18;
    而有的编译器计算出来为 16(比如 VisualC++6.0),先计算前两个i 的和,这时候i 自加两
    次,2 个 i的和为 10,然后再加上第三次自加的i 得 16。其实这些没有必要辩论,用到哪个
    编译器写句代码测试就行了。但不会计算出 15的结果来的。
    ++、--作为前缀,我们知道是先自加或自减,然后再做别的运算;但是作为后缀时
    底什么时候自加、自减?这是很多初学者迷糊的地方。假设 i=0,看例子:
   
    A),j=(i++,i++,i++);
    B),for(i=0;i<10;i++)
    {
     //code
    }
    C),k= (i++)+ (i++)+ (i++);
    可以试着计算他们的结果。 例子为逗号表达式,i在遇到每个逗号后,认为本计算单位已经结束,i 这时候自加。
    关于逗号表达式与“++”或“--
    ”的连用,还有一个比较好的例子:
     int x;
     int i=3;
     x= (++i,i++,i+10);
    问 x的值为多少?i的值为多少?
   
    按照上面的讲解,可以很清楚的知道,逗号表达式中,i 在遇到每个逗号后,认为本计算
    位已经结束,i 这时候自加。所以,本例子计算完后,i的值为5,x的值为 15。
    例子 i与 10进行比较之后,认为本计算单位已经结束,i这时候自加。
    例子 i遇到分号才认为本计算单位已经结束,i 这时候自加。
    就是说后缀运算 C 语言里的计算单位大体分
    以上 3 类。
   
   
   
    留一个问题:
    for(i=0,printf(“First=%d”,i);
    i<10,printf(“Second=%d”,i);
    i++,printf(“Third=%d”,i))
    {
    printf(“Fourth=%d”,i);
    }
    打印出什么结果?

 

 

3、
我有一个 char* 型指针正巧指向一些 int 型变量, 我想跳过它们
为什么如下的代码((int*)p)++; 不行?
在 C 语言中, 类型转换意味着 “把这些二进制位看作另一种类型, 并作相应的对待”; 这是一个转换操作符, 根据定义它只能生成一个右值 (rvalue) 而右值既不能赋值, 也不能用 ++ 自增 (如果编译器支持这样的扩展, 那要么是一个错误, 要么是有意作出的非标准扩展 ) 要达到你的目的可以用:
p = (char *)((int *)p + 1);
或者,因为p是 char* 型, 直接用
p += sizeof(int);
但是, 在可能的情况下, 你还是应该首先选择适当的指针类型, 而不是一味地试图李代桃僵

抱歉!评论已关闭.