卷一:C++语法基础第三篇-指针的语法使用大全

    1.指针与const的三个类型:常量指针、常量指针
  规律:const离变量类型int近还是变量名近。
   例子: int wife = 24,girl = 18;  //以直男、渣男、暖男指针举例,现他们的妻子24岁,一个girl18岁;

(1)常量指针
    const int * zha_nan = &wife;
    zha_nan = 22;         //渣男指针离变量类型近,类型值不能变,这个是错误的
    zha_nan = &girl;     //这个是对的

(2)常量指针

    int * const zhi_nan = &wife;
   zhi_nan = &girl;      // const修饰变量名直男,不能再指向别的变量名(girl),是错误的
    *zhi_nan = 25;     //这个是对的

3)暖男指针,指向的变量和变量值都不能修改

    const int * const nuan_nan = &wife;   
    

    2.二级指针用法,三级指针(一般很少用)
  例子:  int bao_xiang = 9999;   
    int *key1 = &bao_xiang; 
    int **key2 = &key1;   //定义二级指针    

    二级指针存一级指针地址, 解一次引用:*key1是key1地址,解两次:**key2是9999。
    二级指针  两个用处:

(1)二维数组传参;如int swap(int **array,int len)

(2)传递的实参是指针并且要修改:(这个可以用引用更好的代替)


    3.指针与数组:指针数组和数组指针的辨析
   例子(1): int number[4] ={3,5,1,6}; 
    int *minAndMax[2]; // 这是指针数组:这里创建一个数组,每一个变量都是指针,用于存number数组最大值和最小值地址,注意是有2个指针

   例子(2): int girls[3][2]={ {19,17},{20,18},{17,22}};
    int( *age)[2];  //这是数组指针,与上面的区别是创建1个指针指向数组,所以常和二维数组搭配使用才有意义,别写成*(age)[2]


    (3)指针数组访问两种方式

①普遍用数组访问法,age先指向girls的第三行,(*age)[1] 再找到第二列,如下:
    age = &girls[2];      cout<< (*age)[1] <<endl;

   ②因为难理解少用的指针访问法,要解析两次,如下:
    age = &girls[2]; cout<< *((*age)+1) <<endl; 


    4.void类型指针和const常引用,没有类型,C++很多的自带函数都要const void * a = 100;这种常引用写法
   例子: int man = 23;
    void * people = &man;  


    5.指针与函数结合:函数指针
   (1)用处:用在C++的快排函数qsort函数qsort(array,array+len,cmp)中cmp就是传递的函数指针;
 (2)定义: 以C++自带的cmp为例,类型 + (*函数名) + 函数体; 调用就是fp(a,b)
      例子:bool (*fp)(const void *,const void *);

  
    6.指针和引用在参数传递,引用就是取别名
                                             定义                            调用
    (1)单个变量传参:①swap(int a,int b);       swap(a,b)               这是值传递不改变值,
                                      ②swap(int *a,int *b);     swap(&a,&b)         用指针传递地址
                                      ③swap(int &a,int &b);   swap(a,b)            引用传递,比指针更方便和理解
    
    (2)一维数组传参: ①int swap(int array[],int len); swap(array,len)    数组方式传递,也可以带                                                                                                                      array[10]
                               ②int swap(int *array,int len); swap(array,len)     指针传递方式,更常用
    
    (3)二维数组传参:①int swap(int *array[],int len);  swap(array,len)      数组方式传递
                                ②int swap(int **array,int len);    swap(array,len)    指针传递方式,更常用
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值