zoukankan      html  css  js  c++  java
  • 一些小细节

    1、C中printf计算参数时是从右到左压栈的。

    定义一个数组 int arr[ ] = {6 , 7, 8 , 9, 10}

    再定义一个指针 sint  *prt = arr;

    printf("%d ",*ptr); 此时ptr指向第一个元素6;

    *(ptr++)+ = 123展开为*ptr = *ptr + 123; ptr++; 此时ptr指向第二个元素7;

    printf(“%d,%d ”,*ptr,*(++ptr)); 从右到左运算,第一个是(++ptr),也就是ptr++,*ptr = 8,此时ptr指向第三个元素8,所以输出全为8.

    2、编程风格

      if('A' = a)

      {

        a++;

      }

      if(a == 'A')

      {

        a++;

      }

      第一种写法更好一些。如果把“==”误写做“=”,因为编译器不允许对常量赋值,就可以检查到错误

    3、

    %08x为整型以16进制方式输出的格式字符串,会把后续对应参数的整型数字,以16进制输出。08的含义为,输出的16进制值占8位,不足部分左侧补0。

     4、类型转换

    设 unsigned int a = 0xFFFFFFF7;

      对于语句char* b = (char*)&a中a本身为一个uint类型的值,把它的地址赋给一个执行char类型数据的指针。char类型的长度只有一个字节,打印char类型的指针指向的值会是多少?

      &a的结果是一个指针,它的类型取决于a的类型,此处&a的类型应该是:

      unsigned int *;

      char *b = (char *)&a;

      上面等价于:

      unsigned int *p = &a;     //p中的内容是a的地址,即p指向a

      char *b = (char *)p;  //此处的强制转换只是使b也指向a而已

      上面的步骤就是将一个unsigned int 类型的指针强制转换成一个char型的指针。

      所以请注意:这里是char类型的指针转换,而不是char类型的转换。

      这样转换后,假设a的地址是x:

      p + 1 = x + 1*sizeof(int) = x + 1* 4 = x + 4;

      b + 1 =x + 1*sizeof(char) = x + 1*1 = x+1;

      因此将一个unsigned int 类型的指针强制转换成一个char型的指针影响的只是指针的寻址,一开始都是指向a地址的开头。

      所以printf("%08x",*b);  得到的是FFFFFFF7

  • 相关阅读:
    Jenkins调用selenium找不到webdriver:selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
    列表的基本操作
    jenkins集成发送测试报告的常见问题解决
    Chrome 浏览器前端调试技巧大揭秘
    搭建Redis三主三从集群
    Jenkins安装
    python中hasattr()、getattr()、setattr()函数的使用
    python单元测试之unittest框架
    python环境配置详细步骤
    Android:EditText 设置弹出数字输入法键盘
  • 原文地址:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/7136350.html
Copyright © 2011-2022 走看看