zoukankan      html  css  js  c++  java
  • C++学习备忘(二)

    1.c++中的类型转换static_cast、dynamic_cast、reinterpret_cast、和const_cast,详见:

       http://wenku.baidu.com/view/a9356b80d4d8d15abe234e32.html

    2.指针的指针使用例如:

       Item **itemList = NULL;

       itemList = new Item*[n]//初始化一个长度为n的Item*类型的空间,要求Item有默认构造函数

    for(int i=0;i<n;i++) itemList[i] = new Item();// 初始化每一个指针

    //释放过程

    for(int i=0;i<n;i++) delete itemList[i];//逐个释放

    Delete itemList ; //释放itemList 

    3.一个函数有多个值要返回时,可用指针或引用将参数传入在函数内修改,如:

      void GetGirdLocation( int x,int y,int &i,int &j )

      {

           i = y/10;

       j = x/10;

       }

       或

       void GetGirdLocation( int x,int y,int *i,int *j )

      {

           (*i) = y/10;

       (*j) = x/10;

       }

    4.VS2008 快捷键 http://www.cnblogs.com/9999/archive/2009/09/24/1573030.html 

      (Ctrl +k+f 整理格式)

     

    5.按位取反“~”逻辑取反“!”

    6.运算符顺序:++i执行语句前执行,--i执行语句后执行,语句中()的级别最高,指针高于算数逻辑运算,取反“!”高于其他二元运算,算数运算高于逻辑二元运算,比较运算高于&&和||,例如:

       1+2==3&&!item->IsOk()&&!item->Age()>0

       等同于

       ((1+2)==3)&&(!(item->IsOk()))&&((!(item->Age()))>0)

    参见:http://www.slyar.com/blog/c-operator-priority.html

    7.void GetMemory(char *p,size_t num)

    {

    p = (char *)malloc(num);

    //p只是str的值,是指向str对应内存的另一个指针,对p的修改并不影响str本身

    //但是可以通过p指向的内容影响到str影响到的内容

    // 如果str有值,p[i]='x'会影响到str的值

    }

     

    int _tmain(int argc, _TCHAR* argv[])

    {

    char * str= NULL;

    GetMemory(str,10);

      // str[0] = 'x';//错误,str仍为NULL 

    return 0;

    }

    8 C++中的指针类型判断可通过逐步化简的方法实现:

    例如 float (**p)[10];

    解释方法:float A[10];B = &A;p = &B;所以p是一个指向指向一维数组(A)的指针(B)的指针;

    Double *(*gh)[10];

    解释方法 Double* A[10]; gh = &A;所以gh是一个指向由10个指向double的指针的数组的指针。

    Int(*(*F)(int,int))(int);

    解释方法 Int (*A)(int);//A 是一个函数指针参数int返回值int

             A (*F)(int,int);//F是一个函数指针参数(intint)返回值A

    所以:F是一个参数为(int,int)返回值为一个参数是int返回值是int的函数指针的函数指针;

    Int *((*b)[10]);

    解释方法:int *A;// A是指向int的指针

              B = A[10];//方括号的是数组,不影响类型 B是由int*类型组成的长度为10的数组

              b= &B//b是指向这个数组的指针;

    所以b是一个指向长度为10的数组的指针,数组由10个指向整数的指针组成

    Double (*f[10])();

    解释方法:double (*A)();//A是函数指针,返回double 参数void

              f = A[10];//fA类型函数指针组成的数组

    所以f使用10个函数指针组成的数组,这些函数指针没有参数返回double

    9. ++i在语句之前执行,i++在语句之后执行

      for (int i=0;i<2;i++)与for (int i=0;i<2;++i)等效,自增都放在循环体的最后执行,  等价于:

      int i=0;

      while(i<2)

    i++;//++i所以没有影响

       

      但是 for (int y=0,i=0;i<2;y=i++)与for (int y=0,i=0;i<2;y=++i)不同

      前一个相当于:

       int i=0;

       while(i<2)

       {

          y = i;

          i++;

    }

       后者相当于:

       int i=0;

       while(i<2)

       {

          i++;

          y = i;

    }

    10. C++中自加操作的执行时机会受到函数的影响,通常自加在一行结束后执行,在函数内的时候是在函数执行完成后运行。

    例如:

    #include <string>

    #include <iostream>

     

    using namespace std;

     

    int Function(int i)

    {

      cout<<i<<endl;

      return i;

    }

     

    int main()

    {

    int i,j =0;

    i = (j++)+(j++);

        cout<<"i="<<i<<","<< "j="<<j<<endl;

        // i=0;j=2//两个++都是最后执行

        

        j=0;

        i = Function(j++)+(j++);

        cout<<"i="<<i<<","<< "j="<<j<<endl;

        // 0

    // i=1 j=2

    //执行第一个函数是j0,执行后执行第一个j++在执行加法,最后执行另一个j++

    //实际执行相当于

    //int x = Function(j)

    // j++

    // i= x +j

    // j++

        

        j=0;

        i = Function(j++)+Function(j++);

        cout<<"i="<<i<<","<< "j="<<j<<endl;

        //0

        //1

        //i=2 j=2

        j=0;

        cout<<j++<<j++<<j++<<j<<endl;

        // 0123

        system("pause");

        return 0;

    }

     

     

       

     

  • 相关阅读:
    laravel 连接同一服务器上多个数据库操作 、 连接多个不同服务器上的不同数据库操作以及多个数据库操作的事务处理
    061——VUE中vue-router之通过程序控制路由跳转
    015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
    linux传输文件lrzsz
    ffmpeg命令详解(转)
    提取文件名剔除扩展名
    CGI = MCC + MNC + LAC + CI
    VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
    VirtualBox.org
    bat函数调用 带返回值
  • 原文地址:https://www.cnblogs.com/GhostZCH/p/3048920.html
Copyright © 2011-2022 走看看