首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >指针数组和数组指针的简单理解

指针数组和数组指针的简单理解

作者头像
Twcat_tree
发布2022-11-30 21:06:14
发布2022-11-30 21:06:14
73100
代码可运行
举报
文章被收录于专栏:二猫の家二猫の家
运行总次数:0
代码可运行

图解

指针数组,重点在数组

数组指针,重点在指针

 例子:

代码语言:javascript
代码运行次数:0
运行
复制
      include <iostream>
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      using 
      namespace 
      std;
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      int main()
     
    
    
     
    
    
     
      {
     
    
    
     
    
    
     
      int c[
      2][
      4]={
      1,
      2,
      3,
      4,
     
    
    
     
    
    
                  
      5,
      6,
      7,
      8};
     
    
    
     
    
    
     
      int *a[
      4]; 
      //指针数组
     
    
    
     
    
    
     
      int (*b)[
      4]; 
      //数组指针
     
    
    
     
    
    
     
      b=c;
     
    
    
     
    
    
     
      //将数组c中元素赋给数组a
     
    
    
     
    
    
     
      for(
      int i=
      0;i<
      4;i++)
     
    
    
     
    
    
     
      {
     
    
    
     
    
    
     
      a[i]=c[i];
     
    
    
     
    
    
     
      }
     
    
    
     
    
    
     
      //输出看下结果
     
    
    
     
    
    
     
      cout<<*(a[
      0]+
      1)<<
      endl; 
      //输出2就对
     
    
    
     
    
    
     
      cout<<*(a[
      1]+
      1)<<
      endl; 
      //输出6就对
     
    
    
     
    
    
     
      cout<<(*b)[
      2]<<
      endl; 
      //输出3就对  
     
    
    
     
    
    
     
      cout<<(*(b+
      1))[
      2]<<
      endl; 
      //输出7就对
     
    
    
     
    
    
     
      return 
      0;
     
    
    
     
    
    
     
      }
     
    
    
     
    
    
     
      ~

另外一个例子

代码语言:javascript
代码运行次数:0
运行
复制
      #include <iostream>
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      using 
      namespace 
      std;
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      int main()
     
    
    
     
    
    
     
      {
     
    
    
     
    
    
     
      const 
      char *a[] = {
      "I am gel",
      "I like China"}; 
      //指针数组
     
    
    
     
    
    
     
      //输出看下结果
     
    
    
     
    
    
     
      cout<<a[
      0]+
      1<<
      endl; 
      //输出I am gel就对
     
    
    
     
    
    
     
      cout<<a[
      0]+
      1<<
      endl; 
      //输出" am gel"就对
     
    
    
     
    
    
     
      cout<<a[
      1]+
      7<<
      endl; 
      //输出"China"就对     
     
    
    
     
    
    
     
      return 
      0;
     
    
    
     
    
    
     
      }

以下是整理摘自网络:

数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 大小:一个int型指针长度的空间 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。  p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]  p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。

指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 大小:n个int *的数据空间 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针 for(i=0;i<3;i++) p[i]=a[i] 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2] 所以要分别赋值。

数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

优先级:()>[]>*

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档