小语法

作者: yikemi | 来源:发表于2017-06-29 17:15 被阅读10次

    1、int *p = new int[10];//理解,数组的动态分配

    //new int[10] 新申请一段可以保存10个int型整数的内存空间
    //int* p 定义一个int型指针
    //int *p=new int[10] 让int型指针指向申请的内存空间的首地址!
    

    2、double d3 = 1.25e + 20;

    1.25e + 20 表示1.25的10的20次方。

    3、强制类型转换

    强制类型转化没有四舍五入。

    4、函数指针中使用typedef

    typedef int (*PF)(int *, int);
    

    以上定义了一个函数指针。
    一般来说,用typedef关键字会使该声明更简单易懂。

    int (*PF)(int *, int);
    

    也就是说,PF是一个函数指针“变量”。当使用typedef声明后,则PF就成为了一个函数指针“类型”,即:

    typedef int (*PF)(int *, int);
    

    这样就定义了返回值的类型。然后,再用PF作为返回值来声明函数:

    PF ff(int);
    

    参考网址

    5、函数的返回值和函数的调用参数值注意

    在返回值和调用参数值的时候需要考虑到使用的是地址还是值本身。
    (一)需要返回值和调用参数值为地址的时候。需写指针名、者函数名、&取地址的变量。
    (二)需要使用值本身的时候。需要传递的就是*p(指针所指向的内容)、变量。

    6、运算符的结合性?

    运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。也就是同一的时候哪边的优先级高于哪边。
    举个例子,假设是一个运算符,又有表达式abc,如果是左结合的,那么该表达式被解析为(ab)c,如果是右结合的,那么该表达式将被解析为a(b~c)。比如上表中三目运算符?:是从右向左结合的,那么下面的表达式a > b ? b > c ? 1 : 0 : 2将被解析为 a > b ? (b > c ? 1 : 0) : 2。
    参考网址

    7、if/else结构_嵌套结构

    if (...){...}
    else if (...){...}
    else if (...){...}
    else {...}
    
    if/else嵌套结构

    直观表达

    8、flaot和double的精度?

    float是32位,double是64位
    float32位中, 有1位符号位,8位指数位,23位尾数位;
    double64位中,1位符号位,11位指数位,52位尾数位。
    取值范围看指数部分
    float是有符号型,其中,8位指数位,2^8=(-128—127),
    因此实际的范围是-2128—2127,约为-3.4E38—3.4E38;
    同理double范围约是-1.7E308—1.7E308。
    精度是看尾数部分
    float尾数位23位,2^23=8.3E6,6位,所以float的有效位数是6位;
    double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位。

    9、浮点数在选择(判断)结构中

    比较方式参考:


    10、float x = 1.0f;

    f 代表这个数据是float类型的常量;
    如果你直接输入1.0就是double类型 ,当你赋给float类型的时候就会抛异常了。

    11、int a, b, c = 0; 和 int a = 0, b = 0, c = 0;

    For your first code block, int a, b, c = 0;, you are not initializing the primitive types. You cannot use a and b until it is assigned something, event if a = default(int) or just a = 0. Until first assignment, you'll get a compilation error that the variable must be assigned before first use.
    Now if you are comparing int a = 0, b = 0, c = 0; and int a = 0; int b = 0; int c = 0;, those are identical.
    第二种方式才是正确的初始化方式。

    12、new的使用

    new用法:

          1.     开辟单变量地址空间
    
               1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 
    
               2)int *a = new int(5) 作用同上,但是同时将整数赋值为5
    
          2.     开辟数组空间
    
               一维: int *a = new int[100];开辟一个大小为100的整型数组空间
    
               二维: int **a = new int[5][6]
    
               三维及其以上:依此类推.
    
         一般用法: new 类型 [初值]
    

    delete用法:

          1. int *a = new int;
    
               delete a;   //释放单个int的空间
    
          2.int *a = new int[5];
    
               delete [] a; //释放int数组空间
    
          要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问.
    
          用new和delete可以动态开辟,撤销地址空间.在编程序时,若用完一个变量(一般是暂时存储的数组),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它.
    

    13、静态检查

    静态数据类型检查语言也叫静态类型语言,与此相对有动态类型语言。
    (1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
    (2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
    注意:C++并没有提供对指针有效性的静态检查。
    对于动态语言与静态语言的区分,套用一句流行的话就是:Static typing when possible, dynamic typing when needed。

    14、memset用法

    void *memset(void *s, int ch, [size_t]
    函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
    memset:作用是在一段内存块中填充某个给定的值,它是对较大的[结构体]或[数组]清零操作的一种最快方法。

    15、

    相关文章

      网友评论

          本文标题:小语法

          本文链接:https://www.haomeiwen.com/subject/exqvcxtx.html