Chinaunix首页 | 论坛 | 博客
  • 博客访问: 138249
  • 博文数量: 20
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 247
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-12 22:24
个人简介

学霸

文章分类

全部博文(20)

文章存档

2016年(1)

2015年(11)

2014年(8)

我的朋友

分类: C/C++

2014-05-10 23:04:04


点击(此处)折叠或打开

  1. 1.switch易漏理解
  2. int a = 1;
  3. switch(a)
  4. {
  5.     a = 2;
  6.     case 1:
  7.         a = 1;
  8.     break;
  9.     default:
  10.         a = 0;
  11.     break;
  12. }
  13.     printf("a = %d\n",a);

  14. 在switch条件判断中,除case与default以外的模块是不会执行的。

  15. 2.continue 用于条件判断分支。
  16.    int tmp = 2;
  17.    if(tmp)
  18.        continue;

  19.   continue必须位于while或for等循环分支中。

  20. 3.break 用于if条件判断分支。
  21.   while(1)
  22.   {
  23.        if(1)
  24.            break;
  25.        printf("aa\n");
  26.   }
  27.   printf("bb\n");

  28.   break 不能从if条件判断语句中退出,当前代码会跳出while。break 只能用于swith和循环语句。

  29. 4.void 读取void函数的返回值
  30.   void test(int a)
  31.   {
  32.       return a+3;
  33.   }
  34.   int main(void)
  35.   {
  36.       printf("%d\n",test(2));
  37.   }

  38.   试图读取void函数的返回值,编译器报错。

  39. 5.指针退化
  40.   void test(int array[2])
  41.   {
  42.       printf("%d\n",sizeof(array));
  43.   }

  44.   int main(void)
  45.  {
  46.   int array[] ={1,2,3,4,5};
  47.   printf("%d\n",sizeof(array));
  48.   test(array);

  49.   return 0;
  50.  }

  51.   数组作为指针传递时,已经丢失长度信息。参数形式 int array[2]与int array[]与int *array在此处等价。

  52. 6.指针为什么要有类型?
  53.   int array[] ={1,2,3,4,5},*q;
  54.   char *p;
  55.   q = p = array;
  56.   printf("*p=%d *q=%d\n",*p,*q);
  57. //*p=1 *q=1
  58.   p+=4;

  59.   q++;

  60.   printf("*p=%d *q=%d\n",*p,*q);
  61. //*p=2 *q=2
  62.   p+=4;
  63.   q++;

  64.   printf("*p=%d *q=%d\n",*p,*q);
  65. //*p=3 *q=3

  66.   因为编译器在指针运算时需要知道偏移多少。

  67. 7.const 只是给程序员看的
  68.   const int a = 2;
  69.   int *p = NULL;
  70.   p = &a;

  71.   *p = 3;
  72.   printf("a=%d *p=%d\n",a,*p);

  73.   经过const修饰的变量只是在编译的时候,检查是否对其进行了修改。除此之外与不加const的变量都是存放在同一片内存空间,故可以通过直接修改其地址的内容来达到效果。

  74. 8.结构体位域的赋值方式
  75. typedef union un_test_s{
  76.         struct test_s{
  77.                 unsigned int a:1;
  78.                 unsigned int b:3;
  79.                 unsigned int c:4;
  80.         } test_t;
  81.         unsigned int tmp;
  82. } un_test_t;
  83. int main(void)
  84. {
  85.         un_test_t test;
  86.         test.tmp = 0xaa;
  87.         printf("%d %d %d\n",test.test_t.a,test.test_t.b,test.test_t.c);
  88.         return 0;
  89. }
  90. 1010 101 0
  91.  c b a
  92. 10 5 0
  93. 结构体位域的赋值方式是从上到下

  94. 9.stdout and stderr
  95. fprintf(stdout,"hello-std-out");
  96. fprintf(stderr,"hello-std-err");
  97. hello-std-err一定会输出,hello-std-out不一定。stdout和stderr是不是同设备描述符。
  98. stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入,
  99. 1)遇到回车,2)缓冲区满,3)flush被调用。而stderr则不会。

  100. 10.sizeof不是一个函数
  101. int i = 8;
  102. printf("%d\n",sizeof(i++));
  103. printf("%d\n",i);

  104. 输出为4,8

  105. 11.0开头的数字
  106. printf("%d\n",010);

  107. 在C/C++中,以0开头的数字都是八进制的。

  108. 12.a[3] 等价于 3[a]原形为*(a+3)*(3+a)
  109. int a=3, b = 5;
  110. printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);

  111.  how is this? super

  112. 13.printf返回值
  113. int i=43;
  114. printf("%d\n",printf("%d",printf("%d",i)));

  115. 输出:4321

  116. printf返回值是输出的字符个数。


阅读(1233) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:libxml2使用

给主人留下些什么吧!~~