• 指针初学杂记


    创建一个新的指针,首先要赋值,然后在用之前一定要申请地址。即

     int *p = NULL; p = new int;

    void指针 void *p 可以与任意指针类型相互赋值。


    常量限定符const

    1)指向常量的指针:const int *p = &x;

    //可以修改指针指向的地址,但不能修改他指向的内容。
    
    const int *p = &x;
    int x = 12,y = 23;
    //*p = y;//错误的表示方法
    p = &y;//是对的。//可以修改x

    2)常指针:int *const p = &x;

    //指针指向的地址不能变,但是指向地址里的内容是可以变的。
    
    int *const p = &x;
    int x = 23,y = 12;
    //p = &y;//是错的
    *p = 76//对的

    3)指向常量的常指针:const int * const p = &x;

      指针本身不能变,指向地址的内容也不能变。

    指针与数组

      数组名可以看成一个指针,而且是一个常指针,指向数组的起始地址。

    int *p,array[10];
    p = array;//p与array是等价的,对指针p可以执行任何有关数组下标的操作。p[3]==array[3]

    *(p+k)

      对于常规数据类型p+k代表的是指向目前p地址后第k个元素的指针。比如p1-p2代表返回p1值与p2值之间的元素个数

    动态分配数组长度

      重点是申请地址和收回地址。

    int *p , *p1;
    p = new int;
    p = new int [n];//申请一个动态数组
    //int p[n];//错误的申请动态数组方法
    
    delete p;//将收回p指向的地址空间;
    delete [] p;//收回动态数组,将收回p作为数组首地址的数组的空间。

    assert函数

      assert(断言),若断言为假则在发出一个错误消息后程序会终止。比如:我们用来判断p = new int时,是否成功的申请到了空间:

    #include<iostream>
    #include<cassert>
    
    using namespace std;
    
    int main()
    {
        int *p;
        p = new int;
        assert(!p);//p != null
    
        *p = 234;
        cout<<*p<<endl;
    
        return 0;
    }

    详细请看http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html

    引用

      int &y = x;此时x与y用的是同一个内存单元,即:y只是x的别名而已。一个变量只能作为某一个变量的别名。

    int main(int argc,char* argv[])

     主要是为了方便在命令行直接键入参数。

     argc是命令行总的参数个数,argv[]argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数,argv[0]是程序的名字,命令行参数分别放在argv[1] argv[2]……中。 

       int main(int argc,  char* argv[]) 
       { 
           int  i; 
    
           for (i = 0; i<argc; i++) 
                cout<<argv[i]<<endl; 
    //     cin>>i; 
    
           return  0; 
       } 

      

      据说还可以notepad.exe  example.txt  (当前目录下)直接用记事本打开example.txt文件。以后再学http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html

    指向函数的指针

      定义格式为 返回类型 (*函数名)(形式参数表)

    int (*p)();//指向一个没有参数、返回值为int型的函数指针
    double (*p)(int);//指向有一个整形参数、返回值为double型的函数指针

      指针变量外的圆括号不能省略。直接上例子

    #include<iostream>
    
    using namespace std;
    
    void one();
    void two();
    void three();
    int main()
    {
        int select;
        
        void (*func[3])() = {one,two,three};
        while(1)
        {
            cin>>select;
            if(select < 0||select > 2) return 0;
            else func[select]();
        }
        
        system("pause");
        return 0;
    }
    
    void one()
    {cout<<"doubione";}
    void two()
    {cout<<"doubitwo";}
    void three()
    {cout<<"doubithree";}
  • 相关阅读:
    Ubuntu之修改用户名和主机名
    HM中CU,TU的划分
    BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)
    Introducing Regular Expressions 学习笔记
    kubuntu添加windows字体
    WISE安装程序增加注册控制
    Linux内核中常见内存分配函数(一)
    Linux内核中常见内存分配函数(二)
    Swift现实
    Android 5.0(L) ToolBar(替代ActionBar) 现实(四)
  • 原文地址:https://www.cnblogs.com/kbe317/p/3825435.html
Copyright © 2020-2023  润新知