当前位置: 首页 > news >正文

从头开始学C语言第二十九天——指针数组

指针数组其实就是相同数据类型和存储类型的指针变量组成的集合

指针数组和前面提到的数组,字符数组,字符串数组一样都是数组,区别就是他们组成的元素不同

一般说明形式:
<存储类型> <数据类型> *<指针数组名称> [<大小>]

int *p[2],a[2][3]

将数组a[0]和a[1]的首地址分别赋给指针数组pa的数组元素pa[0],pa[1]

pa[0] = a[0];//pa[0] = &a[0][0]

pa[1] = a[1]; //pa[1] = &a[1][0]

#include <stdio.h>

int main()
{
    int a[]={1,2,3,4,5};
    int *p[2];

    p[0] = a;
    p[1] = a+2;

    printf("%p\n",p[0]);
    printf("%p\n",&a[0]);
    
    printf("%p\n",p[1]);
    printf("%p\n",&a[2]);

    return 0;
}

运行程序我们可以发现,p[0]的地址和a[0]地址相同,p[1]的地址和a[2]地址相同。所以我们可以发现,指针数组p[0]包含两个元素,分别是a[0]和a[1]的地址值,输出地址时输出的是a[0]的首地址,以此类推。一维数组和指针数组的关系如下图

 用指针数组计算二维数组元素之和

#include <stdio.h>

int main()
{
    int a[][3]={{1,4,7},{2,5,8},{3,6,9}};
    int *p[3];
    int i=0,j=0;
    int sum1=0,sum2=0;

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            p[i] = a[i];
            sum1 += p[i][j];
            sum2 += *(p[i]+j);
            printf("%d ",p[i][j]);
        }
        puts("");
    }

    printf("%d %d\n",sum1,sum2);

    return 0;
}

相关文章:

  • JavaScript-日期对象与节点操作详解
  • Apache Flink技术原理深入解析:任务执行流程全景图
  • Rocky9.2 编译安装Intel WIFI系列无线网卡驱动
  • 华为终端将全面进入鸿蒙时代
  • LLM - CentOS上离线部署Ollama+Qwen2.5-coder模型完全指南
  • Mimalloc论文解析:小内存管理的极致追求与实践启示
  • 虚拟机访问主机的plc仿真
  • C++学习之网盘项目单例模式
  • Swift 经典链表面试题:如何在不访问头节点的情况下删除指定节点?
  • FPGA 以太网通信(四)网络视频传输系统
  • c#难点整理2
  • windows下利用Ollama + AnythingLLM + DeepSeek 本地部署私有智能问答知识库
  • CVPR 2025 | 文本和图像引导的高保真3D数字人高效生成GaussianIP
  • 美国国家数据浮标中心(NDBC)
  • Leetcode刷题笔记1 图论part03
  • LangChain Chat Model学习笔记
  • 【Docker系列一】Docker 简介
  • 1、正点原子ZYNQ最小系统--GPIO之MIO控制LED笔记
  • 蓝桥杯高频考点——并查集(心血之作)
  • CI/CD(三) 安装nfs并指定k8s默认storageClass
  • 国家统计局向多省份反馈统计督察意见
  • 向猫学习禅修之后,你会发现将生活降格为劳作是多么愚蠢
  • 人民网三评“网络烂梗”:莫让低级趣味围猎青少年
  • 泽连斯基启程前往土耳其
  • 多家外资看好中国市场!野村建议“战术超配”,花旗上调恒指目标价
  • 山西忻州市人大常委会副主任郭建平接受审查调查