当前位置: 首页 > 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)));     // 数组指针类型的指向    1printf("%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://www.mrgr.cn/news/93694.html

相关文章:

  • 渗透测试之利用sql拿shell(附完整流程+防御方案)【上】
  • OpenManus:开源版Manus的快速安装及使用「喂饭教程」
  • 数据结构--【顺序表与链表】笔记
  • python中如何正确进行浮点数的大小比较
  • 【让POSTGRESQL支持MS SQLSERVER的 extension】 Babelfish for PostgreSQL介绍及源码安装
  • 数据库原理6
  • mysql8.0使用PXC实现高可用部署
  • 【Git】创建,切换分支
  • 华为配置篇-OSPF基础实验
  • Spark八股
  • 【基础知识】回头看Maven基础
  • 【Java代码审计 | 第七篇】文件上传漏洞成因及防范
  • 本地部署大语言模型-DeepSeek
  • 【Java代码审计 | 第四篇】SQL注入防范
  • 根据输入汉字生成带拼音的米字格字帖
  • Hive八股
  • SQL经典查询
  • 存量思维和增量思维
  • 项目实战--网页五子棋(对战功能)(9)
  • Scala 中生成一个RDD的方法