当前位置:   article > 正文

指针的相关知识

指针的相关知识

1.行指针

  行指针  是一个指针, 指向的元素是一维数组。
        
存储行地址的指针变量,叫做行指针变量。形式如下:
        
         存储类型   数据类型   (*指针变量名)[表达式:列数] ; 
      
例如,int a[2][4];  
     int (*p)[4];    

eg:
    int a[3][3] = {1,2,3,
                   4,5,6,
                   7,8,9};


    int (*p)[3] = &a[0];
    int (*p)[3] = a;

    int (*p)[3] = &a[1];
    

2.行指针与二维数组

int a[3][3] = {1,2,3,
                   4,5,6,
                   7,8,9};

    int (*p)[3] = a;    // int (*p)[3] = &a[0];    

    p[1][2]    ==  (*(p + 1))[2]    ==   *(*(p + 1) + 2) 
             

遍历二维数组:
      int a[3][4] = {1,2,3,4,
                     5,6,7,8,
                     9,10,11,12};

      int (*p)[4] = a;    // int (*p)[4] = &a[0];

      int i,j;
      for(i = 0; i < 3; i++)
      {
          for(j = 0; j < 4; j++)
          {
              printf("%d\t", p[i][j]);    //*(*(p + i) + j)    (*(p + i))[j]
          }
          puts("");
      }       

3.行指针与一维数组

    int a[5] = {1,2,3,4,5};


    int (*p)[5] = &a;

    int i;
    for(i = 0; i < 5; i++)
    {
        printf("%d\n", (*p)[i]);    *((*p) + i)     p[0][i]
    }
    

    p[0][i] ==  (*(p+0))[i]   == *(*(p + 0) + i)        

4.指针数组

所谓指针数组是指由若干个具有相同存储类型和数据类型的指针变量构成的集合。
    是一个数组,元素是一个一个的指针。    
        
        
指针变量数组的一般说明形式: 
          存储类型  数据类型  *指针变量数组名[大小]; 
                 int *a[3];  

//指针数组名就表示该指针数组的存储首地址,即指针数组名为数组的指针。
    
    
1.初始化
    
        int a = 10, b = 20, c = 30;
        int *p[3] = {&a, &b, &c}; 


        printf("%d\n", *p[0]);

2.赋值
        int a = 10, b = 20, c = 30;
        int *p[3];
        p[0] = &a;
        p[1] = &b;
        p[2] = &c;
        
        int d = 100;
        p[2] = &d;

5.特殊的指针

1.野指针: 指针指向不明确,被称为野指针。 野指针一旦使用就段错误。
          int *p;        


2.空指针: 指针指向 NULL (零地址)。  空指针一旦使用就段错误。
          int *p = NULL;


3.空类型指针(万能指针):可以指向任意类型的地址  
            void *p;
  注意:万能指针使用前必须强制转换为对应数据类型的指针 
      
  eg:
            int a = 10;
            void *p = &a; 
            
            printf("%d\n", (int *)p);


4.二级指针/多级指针
    指向指针的指针就是二级指针
    
    int a = 10;
    int *p = &a;

    int **p = &p;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/765974
推荐阅读
相关标签
  

闽ICP备14008679号