指针数组的用法

article/2025/9/22 4:03:29

指针数组

1、学习目标

  • 掌握指针数组的用法
  • 总结与思考

2、指针数组

  • 所谓指针数组是指由若干个具有相同存储类型数据类型指针变量构成的集合。

  • 指针数组的一般说明形式:

    • <存储类型> <数据类型> *<指针数组名> [<大小>]
    • 指针数组名表示该指针数组的起始地址
  • 声明一个指针数组

    • double * p[2] (指针数组), a[2] [3](二维数组);

      把一维数组a[0]和a[1]的首地址分别赋予指针变量数组的数组元素p[0]和p[1]。

      p[0]=a[0]; //等价p[0]= &a[0] [0]; p[0]指向了一维数组a[0]的第一个元素a[0] [0]

      p[1]=a[1]; //等价p[1] = &a[1] [0]; p[1]指向了一维数组a[1]的第一个元素a[1] [0]

    • p[0]=a[0];p[1]=a[1];原理示意图:

      指针数组1
    • 示例:指针数组与一维数组的关系

      #include <stdio.h>int main()
      {int * p[3];int a[] = {3,6,1,9,10};p[0] = a;p[1] = a + 1;p[2] = a + 3;//p[0],p[1],p[2]均为地址printf("%d %d %d\n", a[0], a[1], a[3]);printf("%d %d %d\n", *(p[0]), *(p[1]), *(p[2]));//[]的优先级高于* 所以()可以省略return 0;
      }
      

      运行结果:

      $ ./app
      3 6 9
      3 6 9
      

      指针数组与二维数组的关系

      #include <stdio.h>int main()
      {int a[2][3] = {{1,4,6},{12,9,7}};int * p[2];p[0] = a[0];//&a[0][0]p[1] = a[1];//&a[1][0]printf("%d\n", a[0][1]);printf("%d\n", *(a[0]+1));//加*取值printf("%d\n", *(p[0]+1));//一级指针加1是移动一个数(列)printf("%d\n", *(p[1]+2));return 0;
      }
      

      运行结果:

      $ ./app
      4
      4
      4
      7
      

      示意图:
      指针数组2

3、程序举例

  • 编程:利用指针数组处理一个二维数组,要求求出二维数组所有元素的和。

    (1)指针数组加1,移动多少字节?

    #include <stdio.h>int main()
    {int a[2][3] = {{1,4,6},{12,9,7}};int * p[2] = {a[0], a[1]};printf("%p %p\n", p[0], a[0]);printf("%p %p\n", p[1], a[1]);//p[0]指向a[0],p[1]指向a[1]   return 0;
    }
    

    运行结果:

    $ ./app
    0x7ffeba244cc0 0x7ffeba244cc0
    0x7ffeba244ccc 0x7ffeba244ccc//12个字节3*4
    

    (2)访问第i行第j列。

    #include <stdio.h>int main()
    {int a[2][3] = {{1,4,6},{12,9,7}};int * p[2] = {a[0], a[1]};int i, j;
    //  printf("%p %p\n", p[0], a[0]);
    //  printf("%p %p\n", p[1], a[1]);for(i = 0; i < 2; i++){for(j = 0; j < 3; j++)printf("%d %d %d", a[i][j], *(a[i]+j), *(p[i]+j));//  printf("%d %d ", *(*(a+i) + j), *(*(p+i) + j));//拆开下标puts("");}return 0;
    }
    

    运行结果:

    $ ./app
    1 1 1 4 4 4 6 6 6 
    12 12 12 9 9 9 7 7 7 
    

    (3)求和

    #include <stdio.h>int main()
    {int a[2][3] = {{1,4,6},{12,9,7}};int * p[2] = {a[0], a[1]};int i, j, sum = 0;
    //  printf("%p %p\n", p[0], a[0]);
    //  printf("%p %p\n", p[1], a[1]);for(i = 0; i < 2; i++){for(j = 0; j < 3; j++)sum += *(p[i]+j);}printf("sum = %d\n", sum);return 0;
    }
    

    运行结果:

    $ ./app
    sum = 39
    

4、总结与思考

  • 主要介绍了指针数组的用法,包括声明,初始化,赋值及指针数组如何访问二维数组等。

  • 思考

    • 如何计算指针数组占用的内存空间?

      #include <stdio.h>int main()
      {int a[2][3] = {{1,4,6},{12,9,7}};int * p[2] = {a[0], a[1]};int i, j, sum = 0;printf("total: %d\n", sizeof(p));return 0;
      }
      

      运行结果:指针在64位机中长度占8字节,int *p[2]中有两个长度为8字节的地址

      $ ./app
      total: 16
      
    • 指针数组名加1,移动多少字节?

      • *(p+1):走了一行; * (p+1)+1走了一列
      • 字节数由指针数组指向的数组内容决定,见“程序举例(1)”
    • 指针数组名相当于什么样的指针?

      • 指针数组名就是元素地址相当于一级指针取地址就是二级指针,故指针数组名相当于二级指针
      • “数据类型 * q ” 本身就是一个指针,而它的数据类型是int * 也是一个指针,故称为二级指针。
        二级指针

http://chatgpt.dhexx.cn/article/fWl77uXf.shtml

相关文章

数组指针 和 指针数组 的区别

目录 0. 引言1. 数组指针2. 指针数组3. 小结 本文使用运行环境如下&#xff1a; 操作系统&#xff1a;Ubuntu Linux 18.04 64 bit 编译环境&#xff1a;gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 0. 引言 数组指针和指针数组且听之类似&#xff0c;实际完全不同。数组…

C语言(函数指针数组)详解

要了解函数指针数组&#xff0c;可以从三个角度来分析。所谓函数指针数组&#xff0c;从字面意思上来解析&#xff0c;函数指针数组的组成有三个点&#xff0c;函数&#xff0c;指针&#xff0c;数组。首先我们知道&#xff0c;函数指针数组&#xff0c;是一个数组&#xff0c;…

c语言 指针数组

文章目录 前言一、指针数组的定义声明,赋值&#xff1a;二、指针数组的应用&#xff1a;总结 前言 今天我们讲解一下什么是指针数组。 一、指针数组的定义声明,赋值&#xff1a; 什么是指针数组呢&#xff1f; 指针数组 &#xff1a;就是首先定义一个数组&#xff0c;数组里面…

c语言之——指针数组与数组指针

一、指针数组和数组指针的定义 1. 指针数组&#xff1a;是指一个数组里面装着指针&#xff0c;也即指针数组是一个数组&#xff1b; 定义形式&#xff1a;int *a[10]&#xff1b; 说明&#xff1a;[]的优先级高于*&#xff0c;该定义形式应该理解为&#xff1a;int * (a[10]…

关于指针数组与数组指针详解(知识点全面)

1.目录 1.指针数组 2.数组指针 2.它们的区别 1.指针数组 如果一个数组中的所有元素保存的都是指针&#xff0c;那么我们就称它为指针数组。其一般形式为&#xff1a; 数据类型 *数组名[常量表达式][常量表达式]...... ; 它是一个数组&#xff0c;数组的元素都是指针&…

指针数组(指针类型的数组)

顾名思义&#xff1a;指针类型的数组&#xff0c;首先是一个数组&#xff0c;数组元素存储的是指针。(中国的修饰词往往都在前面&#xff0c;而西方修饰词往往是放在后面) 语法如下&#xff1a; 目标类型 数组名称[元素个数] 如&#xff1a;int * p[3] 数组p有3个元素&#x…

数组指针和指针数组的区别

文章目录 前言 一、什么是指针数组&#xff1f; 1.定义 2.声明 3.指针数组的内存示意图 二、什么是数组指针&#xff1f; 1.定义 2.声明 3.内存示意图 三、如何区别指针数组和数组指针&#xff1f; 四、实践理解 总结 前言 这几天老师有问到指针数组和数组指针的区别&#xff…

C语言—指针数组与数组指针

前言&#xff1a; 看到标题的小伙伴可能会有点疑惑&#xff0c;什么是指针数组&#xff0c;数组指针&#xff1f;&#xff1f;傻傻分不清楚&#xff0c;不怕&#xff0c;听我慢慢道来。 正文&#xff1a; 要想弄清楚这两个概念&#xff0c;我们不妨举几个例子&#xff1a; …

指针数组和数组指针的区别及其详解

引言 对于指针数组和数组指针的概念&#xff0c;相信很多人经常会感到迷惑&#xff0c;见到二者一时不能分辨究竟对应哪一个才是对的。接下来我们来分析一下二者区别。 我们来看一下这个示例代码&#xff1a; int *ptr1[10]; int (*ptr2)[10];对于上述代码语句&#xff0c;你…

C语言学习—数组指针和指针数组的区别

前言 本文章对指针数组和数组指针的区别进行了分析介绍 一、数组指针和指针数组的定义 1.数组指针&#xff1a;定义 int (*p)[n]; 由于()的优先级高&#xff0c;首先说明p是一个int类型指针&#xff0c;它是指向一个整型(int)的一维数组&#xff0c;这个一维数组的长度是n&a…

指针数组和数组指针

1.什么是指针数组和数组指针 顾名思义&#xff1a;指针数组是“存放指针的数组”&#xff0c;这个变量是一个数组&#xff0c;用指针修饰&#xff0c;数组中的每个元素都是指针。 数组指针是“指向数组的指针”&#xff0c;这个变量是一个指针&#xff0c;用数组修饰&#xf…

指针数组和数组指针(非常易懂)

指针数组与数组指针 目录&#xff1a; 1.指针与一维数组 2.指针与二维数组 3.指针数组与数组指针 1.指针与一维数组 当定义一个一维数组时&#xff0c;系统会在内存中为改数组分配一个储存空间&#xff0c;其数组的变量名就是数组的首地址。若定义一个指针变量&#xff0c;并…

数组指针和指针数组

首先&#xff0c;理解一下数组指针和指针数组这两个名词&#xff1a; “数组指针”和“指针数组”&#xff0c;只要在名词中间加上“的”字&#xff0c;就知道中心了—— 数组的指针&#xff1a;是一个指针&#xff0c;什么样的指针呢&#xff1f;指向数组的指针。 指针的数…

如何下载风云卫星数据?

如何下载风云卫星数据&#xff1f; 这个是下载风云数据的网址&#xff1a; http://satellite.nsmc.org.cn/PortalSite/Data/Satellite.aspx 1.查找数据 步骤见如图1&#xff1a; 2.选择数据 选择“搜索”以后就就出现图2这个页面&#xff1a;文件名如果被省略了&#xff0…

总结部分SAR卫星及其参数以及SAR卫星发展的趋势

总结国内外失效、在轨和未来发射的SAR卫星及其参数 国内的SAR卫星及其参数 1、高分三号卫星 高分三号卫星(GF-3)于2016年8月10日成功发射&#xff0c;是我国首颗分辨率达到1米的C频段多极化合成孔径雷达(SAR)卫星&#xff0c;自然资源部为其主用户。 GF-3星的分辨率可以达到…

spot卫星介绍与数据下载

1.简介 1.1基本信息 SPOT系列卫星是法国空间研究中心&#xff08;CNES&#xff09;研制的一种地球观测卫星系统&#xff0c;已发射SPOT卫星1-7号。目前CNES已开放spot1-5的卫星数据&#xff0c;可免费下载数据的时间范围为1986年-2014年。 1.2卫星年表 名称信息SPOT-11986年…

空气污染气体卫星数据的下载教程

影响空气质量的主要气体有&#xff1a;二氧化硫、一氧化碳、二氧化氮、可吸入颗粒和臭氧等。我们可以通过Giovanni平台下载空气污染气体的卫星产品数据。 Giovanni平台介绍 Giovanni&#xff0c; 是NASA 旗下的地球科学可视化工具。通过简单的操作&#xff0c;即可将NASA 相关…

GRACE卫星介绍与解密数据下载

1 简介 1.1 基本信息 GRACE &#xff0c;Gravity Recovery and Climate Experiment&#xff0c;由 NASA 和德国宇航中心&#xff08;DLR&#xff09;联合研制&#xff0c;于 2002 年 3 月 17 日在发射。发射 时其预计寿命为 5 年&#xff0c;一直超期服役到2017年坠毁。后继卫…

风云气象卫星数据处理调研报告

风云卫星遥感数据服务平台 http://www.nsmc.org.cn/NSMC/Home/Index.html http://data.nsmc.org.cn/PortalSite/Default.aspx 风云四号气象卫星是我国第二代静止气象卫星&#xff0c;充分考虑海洋、农业、林业、水利以及环境、空间科学等领域的需求&#xff0c;以实现综合利用…

worldview卫星数据的查询方法

地理遥感生态网平台代理worldview1、worldview2、worldview3、worldview4、quickbird、geoeye、ikonos、 pleiades、spot1、spot2、spot3、spot4、spot5、spot6、spot7、landsat5(tm)、landsat(etm)、landsat8、rapideye、alos、aster、Hyperion(EO-1)、kompsat2、kompsat-3、k…