指针的相关知识

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;

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值