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

c语言笔记 数组进阶题目的理解

题目:声明一个二维 int 型数组 a,再声明另一个一维数组指针数组 b,使该数组 b 的每一个指针分别指向二维数组 a 中的每一个元素(即每一个一维数组),然后利用数组 b 计算数组 a 的和。

图解:画图帮助理解

        我们要清楚什么是指针数组和数组指针,我们先要有知识储备才能完美的做好这道题目.

//定义一个指针数组 
int *p[3]; 

        指针数组:数组的元素是一个个指针,[]的元素优先级高于*;指针数组跟其他的普通数组的区别在于数组的元素不一样。

//定义一个数组指针
int (*p)[3];

        一维数组指针:指一个指针指向int [3]型的数组,跟普通指针没有区别。就是指向类型不一样.

一维数组指针数组 b是什么呢?

在之前的笔记中,我们知道这是一个数组。那么数组的元素类型和变量类型的确定(之前的笔记),比如数组的元素就是把数组名+[]拿走,剩下的就是数组的元素类型。

那么该数组b的元素类型是数组指针,我们知道数组指针是指向数组的指针,所以这种复杂的类型就是:一个数组中存放着数组指针,数组的元素是数组指针。数据里面的指针指向一维数组。

代码:

#include <stdio.h>
// 数组指针数组
int main(void)
{
    int a[2][3] = {1, 2, 3, 4, 5, 6}, sum = 0; // 定义一个二维数组 该二维数组有两个元素
    // 数组指针数组b int (*)[] 数组指针类型
    int(*b[2])[3];
    b[0] = a;
    b[1] = a + 1; // 直接b[1]当作指针来用 a+1表示二维数组的第二个元素

    printf("%d\n", *(*(b[0] + 0)));     // 数组指针类型的指向    1
    printf("%d\n", *(*(b[0] + 0) + 1)); // 数组指针类型的指向  2  b[0][0][1]
    printf("%d\n", b[0][0][1]);

    printf("%p\n", b[0] + 1); // +1是以类型的字节为单位进行偏移
    printf("%p\n", b[1]);

    // 第一种方式:
    for (int i = 0; i < 6; i++)
    {
        sum += (*(*(b[0] + 0) + i)); // 等价于sum += b[0][0][i];
    }
    printf("第一种方式:%d\n", sum);

    // 第二种方式
    for (int i = 0; i < 2; i++)
    {
        for (int n = 0; n < 3; n++)
        {
            sum += b[i][0][n]; //等价于 *(*(b[i]+0)+i)
        }
    }
    printf("第二种方式:%d\n", sum);

    return 0;
}

文章转载自:

http://PvEUjqS6.knzhy.cn
http://c9d5phBo.knzhy.cn
http://1IB9cr9i.knzhy.cn
http://OqlPwcqu.knzhy.cn
http://BQeb5PNQ.knzhy.cn
http://r66Oo6V8.knzhy.cn
http://2pwWaegp.knzhy.cn
http://cVCETY2D.knzhy.cn
http://RQfTNKl2.knzhy.cn
http://BEvFn5bQ.knzhy.cn
http://BnEoq1cS.knzhy.cn
http://HWMofKyW.knzhy.cn
http://JrW5Qym0.knzhy.cn
http://kng8ORwZ.knzhy.cn
http://Zv2ptLT1.knzhy.cn
http://pSX8Jiy5.knzhy.cn
http://4vDjYCs0.knzhy.cn
http://aZPn79AQ.knzhy.cn
http://4QbMoi1d.knzhy.cn
http://SVjOkkOL.knzhy.cn
http://LWmiroWU.knzhy.cn
http://cPBebebQ.knzhy.cn
http://UnpLhRU8.knzhy.cn
http://8IU5nwMK.knzhy.cn
http://eouXNdjM.knzhy.cn
http://B0LKopDf.knzhy.cn
http://3B6Ffzrp.knzhy.cn
http://uksgyfFM.knzhy.cn
http://dRXNITy4.knzhy.cn
http://D7xT9G4a.knzhy.cn
http://www.dtcms.com/a/57468.html

相关文章:

  • 网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
  • 15 HarmonyOS NEXT UVList组件开发指南(二)
  • 先序二叉树的线索化,并找指定结点的先序后继
  • 1-1 驱动开发HelloWorld
  • 【定制开发】碰一碰发视频系统定制开发,支持OEM
  • 【Java】认识String类、字符串不可变性 + StringBuilder和StringBuffer —— 有码有图有真相
  • Java多线程与高并发专题——关于CopyOnWrite 容器特点
  • Cursor 使用经验,一个需求开发全流程
  • Spring为什么要用三级缓存解决循环依赖?
  • Django模板语法及静态文件
  • 阿里云CTF2025 ---Web
  • Javascript 基础数据类型
  • AI多模态教程:DeepSeek多模态模型解析及实践指南
  • python re正则表达式
  • 分布式锁—7.Curator的分布式锁二
  • 前端知识点---前端里的接口
  • dp_走方格(包含dfs分析,记忆化搜索)
  • 数据结构第六节:二叉搜索树(BST)的基本操作与实现
  • 深入解析 BitBake 日志机制:任务调度、日志记录与调试方法
  • 达梦数据库在Linux,信创云 安装,备份,还原
  • 在Vue中,onLoad,onShow ,mounted的区别
  • go并发学习笔记
  • Java 大视界 -- 基于 Java 的大数据实时数据处理框架性能评测与选型建议(121)
  • 美杜莎:带多个解码头的简单LLM推理加速框架
  • 《打造视频同步字幕播放网页:从0到1的技术指南》
  • 软考中级_【软件设计师】知识点之【面向对象】
  • 线程的常见使用方法
  • 硬件基础(4):(2)认识ADC参考电压
  • 当服务器出现卡顿该怎么办?
  • MELON的难题