二维数组

int a[5] = {1,2,3,4,5};
int b[3][4] = {1,2,3,4,5,6,5,1,2,4,5,6};
  
printf("%d\n",sizeof(a));   // 20
printf("%d\n",sizeof(b));   //48
printf("%d\n",sizeof(b[0]));    //16
printf("%d\n",sizeof(b[0][1])); //4

指针的使用场景

指针的作用:传递与偏移

  #include <stdio.h>
  #include <string.h>
  int main()
  {
     char *p = "xiaozhao"; 
     char c[20] = "xiaohong"; //等价于strcpy(c,"xiaohong")
     p = "xiaoyu";
  //    c = "ximi"; 不可以因为数组名指的数组首元素地址,不可以为左值
  //    memcpy(p,"xiaoyu",5); 会段错误
  //    strcpy(p,"xiaozhao"); //不可以,因为内部也是通过数组下标访问
      puts(p);
      p = c;
      strcpy(p,"xiaozhang");                                                                     
      puts(p);
      return 0;
  }

代码示例

#include <stdio.h>
  //void print(int p[][4],int row)
  void print(int (*p)[4],int row)
  {
      int i,j;
      for (i = 0; i < row; ++i) {
         for (j = 0;  j< sizeof(*p)/sizeof(int); ++j) {
            // printf("%3d",*(*(p+i)+j)); 
            // printf("%3d",*(p[i]+j)); 
             printf("%3d",p[i][j]); 
          }   
          printf("\n");
      }   
  }
  // 数组指针 传递 二维数组
  int main()
  {
     int a[3][4]={1,3,5,7,2,4,6,8,9,11,13,15};
      int (*p)[4];
      p = a;
      //printf("%d\n",p[1][2]); 6
      //printf("%d\n",*(p[1]+2)); 6
      printf("%d\n",*(*(p+1)+2)); //6                                                            
      print(p,3);
      p =(int (*)[4])malloc(16*100); //动态二维数组 分配100个空间每个空间存储4个int*             
      p[99][3] = 1000;
      return 0;
  }

posted on 2021-08-07 06:41  lodger47  阅读(19)  评论(0)    收藏  举报

导航