c 与 c++ 的一些知识点

    这里会记录一些c\c++的一些知识点,常看常新。

    (1)printf 函数与自增的结合使用

   int i = 0;
   printf("%d, %d", ++i, i++);

      这个printf输出会是什么? g++ 编译后运行结果是"2, 0",而不是"1, 1"。c\c++ 函数参数压栈的顺序是从右至左,体现在上面就是先压入"i++",再压入"++i",这样由于栈是后进先出的,所以第一个参数"++i"结果会被放在栈顶位置。c\c++的函数实参可以是任何表达式,只是实际运行时会被先计算出一个结果在传递进函数。对于这样的问题更详细的解说可以参见csdn的这个帖子

     (2)*ptr++ 的特点分析

      很多时候会看见这样的表达式 "*dst++ =  *src++" 。这个表达式包含有下面几个知识点:

  • 后缀“++”运算符优先级高于 “*”;
  • ++ operator 产生 ptr 的一个副本拷贝;
  • ++ 后缀操作增加 ptr 本省的值;
  • 在 ptr 拷贝上执行提领“*”访问;

      (3)sizeof 与 内存对齐

    struct aa {
        char a;
        char b;
        double c;
    }
    printf("%d", sizeof(aa));

 

      输出应该是多少?   struct 的大小是其最大子元素(基本数据类型)的整数倍。这和内存对齐有关系。所以输出是 16。我之前有一篇和这个主题相近的一片文章,参见这里。有关内存对齐的问题以后再说。

posted @ 2012-10-07 15:16  rereadyou  阅读(188)  评论(0编辑  收藏  举报