【带头学C++】----- 三、指针章 ---- 3.7 数组指针-3.8二维数组与数组指针的关系

计算机二级C语言操作题通关攻略:从文件操作到链表实战 C语言作为结构化编程的基石,其核心在于通过指针、结构体等机制实现对内存的精细控制。理解其工作原理,能帮助开发者构建高效、可靠的系统软件。在计算机二级考试中,这种能力通过操作题进行检验,尤其聚焦于文件操作、字符串处理、结构体与链表等高频考点。这些技术在实际工程中价值显著,例如文件操作是数据持久化的关键,链表则广泛用于实现动态数据结构。本文以真题为蓝本,深入解析程序填空、修改与设计三大题型,提供从环境搭建、解题思路到代码实现的完整路径,并特别针对文件读写和链表构建等热词场景,给出可直接套用的模板与避坑指南,助力 阅读详情

3.7 数组指针   

在C++中,数组指针是指向数组的指针。可以使用指针来操作数组,例如访问数组元素或传递数组到函数。在C++中,数组名实际上是一个指向数组第一个元素的指针。

下面是一些有关数组指针的重要概念:

  1. 定义数组指针:数组指针可以通过使用指针声明运算符(*)来定义。例如,int* ptr 定义了一个指向整型数据的数组指针。

  2. 初始化数组指针:可以将数组的地址赋值给数组指针,以便指向该数组。例如,int arr[5] = {1, 2, 3, 4, 5}; int* ptr = arr; 这里将数组 arr 的地址赋值给指针 ptr。

  3. 访问数组元素:通过使用数组指针,可以访问和操作数组元素。可以使用指针解引用操作符(*)来访问指针指向的数组元素。例如,int x = *ptr; 将指针 ptr 所指向的第一个元素的值赋给变量 x。

  4. 数组指针的指针算术运算:指针算术运算允许在数组中移动指针,以访问其他元素。在使用指针算术运算时,指针将根据其数据类型进行适当的偏移。例如,ptr++ 将指针 ptr 向前移动一个位置,以指向下一个元素。

  5. 传递数组给函数:可以将数组指针作为参数传递给函数。在函数声明中,可以使用指针作为形参,以接受数组参数。函数可以使用指针操作数组,就像在主函数中一样。

下面是一个简单的示例,演示了如何使用数组指针操作数组:

#include <iostream>

void printArray(int* arr, int size) {
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int* ptr = arr;
    
    // 访问数组元素
    std::cout << "第一个元素:" << *ptr << std::endl;
    std::cout << "第二个元素:" << *(ptr + 1) << std::endl;
    
    // 传递数组给函数
    printArray(arr, 5);
    
    return 0;
}

在上面的示例中,我们首先定义了一个 printArray 函数,它接受一个整型数组指针和数组的大小作为参数,并打印数组的元素。

然后,在主函数中,我们定义了一个名为 arr 的整型数组,并将其地址赋给指针 ptr。我们使用指针解引用操作符 * 来访问 ptr 指向的数组元素,并打印出第一个元素和第二个元素。

接下来,我们调用 printArray 函数,并将数组 arr 和数组的大小作为参数传递给函数。函数打印数组的所有元素。

输出结果为:

第一个元素:1
第二个元素:2
1 2 3 4 5

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

 在C++中,二维数组和数组指针虽然在某种程度上可以互相转换和使用,但它们并不完全等同。

首先,让我们明确二维数组和数组指针的定义:

  1. 二维数组是具有固定大小的多维数组,其元素以行和列的形式排列。例如,int array[3][4] 是一个大小为3×4的二维数组,其中包含12个整数元素。

  2. 数组指针是指向数组的指针变量。可以使用指针访问数组元素。例如,int (*ptr)[4] 是一个指向大小为4的整数数组的指针。

二维数组和数组指针之间有以下关系:

  1. 数组名是一个指向数组的指针:

    • 对于一个二维数组,数组名是指向第一行的指针。例如,int array[3][4] 中的 array 即为指向 array[0] 的指针。
    • 对于一个更高维度的多维数组,数组名也是指向第一个元素的指针。
  2. 数组指针可以用于处理二维数组:

    • 数组指针可以通过逐行遍历来访问二维数组中的每个元素。
    • 通过对指针进行指针算术运算,可以在二维数组中移动。

示例代码如下:

int array[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};
int (*ptr)[4] = array; // 数组名即为指向第一行的指针

// 通过数组指针访问二维数组元素
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        cout << ptr[i][j] << " ";
    }
    cout << endl;
}

// 通过指针算术运算在二维数组中移动
cout << *(ptr[0] + 1) << endl; // 输出第一行的第二个元素 2
cout << *(*(ptr + 1) + 2) << endl; // 输出第二行的第三个元素 7
  1. 内存布局:

    • 二维数组在内存中是以连续的块的形式存储的,按照行主序的方式存储。也就是说,二维数组中的每一行是紧挨着前一行存储的。
    • 数组指针不一定连续存储,它只指向数组的某个位置。
  2. 数组维数:

    • 二维数组是一个确定维数的数组,例如 int array[3][4] 是一个具有3行4列的二维数组。
    • 数组指针不限于特定的维数,它可以指向多维数组的不同维度。
  3. 函数参数传递:

    • 二维数组可以作为函数参数进行传递。传递二维数组时,可以使用指针或引用的方式。
    • 数组指针也可以作为函数参数进行传递。可以通过传递数组指针来实现对二维数组的访问和处理。

示例代码如下:

// 传递二维数组作为函数参数
void processArray(int arr[][4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
}

// 传递数组指针作为函数参数
void processPointer(int (*ptr)[4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            cout << ptr[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int array[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    // 作为函数参数传递二维数组
    processArray(array, 3);

    // 作为函数参数传递数组指针
    processPointer(array, 3);

    return 0;
}

 

Keil v5.11给STM32烧录程序记录 1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ... 阅读详情

相关推荐

Unity动画状态机实战:Trigger和Bool参数到底怎么选?附5个常见场景解析

本文深入解析Unity动画状态机中Trigger和Bool参数的核心差异与应用场景。通过对比两者在描述瞬时事件与持续状态上的本质区别,并结合角色移动、攻击连招、跳跃落地、受击死亡及环境交互等5个实战场景,提供了清晰的选择逻辑与避坑指南,帮助开发者构建更健壮、易维护的动画逻辑。

weixin_29009501的博客 117

C语言数据结构教程:从内存管理到链表、树、图的底层实现

数据结构是计算机科学的核心基础,它研究数据在计算机中的组织、存储和操作方式。其核心原理在于通过特定的逻辑结构(如线性、树形、图状)和物理存储结构(如顺序、链式),实现对数据的高效管理。掌握数据结构对于编写高性能、可扩展的软件至关重要,是算法设计、数据库系统、编译器开发乃至人工智能等领域的基石。在工程实践中,理解数据结构的底层实现,尤其是通过C语言手动管理内存和指针,能从根本上提升对程序性能与资源消耗的洞察力。本教程聚焦于链表、二叉树、堆、哈希表等常用结构,通过热门的【内存管理】和【指针操作】实践,手把手带你

weixin_30664615的博客 333

全志Longan和Tina系统T113-S3-(Tina Linux 系统介绍)

Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开发包,包含了 Linux 系统开发用到的内核源码、驱动、工具、系统中间件与应用程序包。Tina系统软件架构如图所示。从下至上分别为Kernel && Driver、Libraries、System Services、Applications 四层。

szembed的博客 6309

【带头学C++】----- 三、指针章 ---- 3.6 指针数组

通过指针数组,我们可以方便地管理多个指针,并通过下标访问和修改对应的指针。这种技术在许多场景中都很有用,例如在函数中传递多个指针、管理动态分配的内存块等。在 C++ 中,指针数组是一个数组,它的每个元素都是一个指针。指针数组可以用于存储和管理一组指针,这些指针可以指向不同类型的数据。在这个示例中,我们首先声明了一个包含 3 个指针元素的指针数组。可以使用指针数组中的元素来访问和修改对应的值。的地址分别赋给了数组中的元素。

Phofomy的博客 422

wintab开发例程

 タブレットとスタイラスペンを使うと、パソコンに手書きの線を入力できます。筆圧を入力することができるので毛筆のような表現も可能です。ペンの傾きを入力できる機種もあり、アイデア次第で面白いことに使えそうです。  私は昔(94年頃)、WACOMのタブレットを用いたプログラム開発をしたことがあります。当初A3版ほどの大きさのUDというタブレットを使っていて、その後 ArtPad という小さいサイズの

grass168的专栏 3234

vivado2020.2安装教程:Windows平台完整指南

手把手带你完成vivado2020.2安装教程,覆盖下载、配置到验证全过程,解决常见安装问题,确保在Windows平台顺利部署开发环境,适合初学者快速上手。

weixin_42607969的博客 1319

【C++ STL】list容器的简单模拟实现

在vector容器的简单模拟实现中,我们构造了一个简单的vector容器,那相比于其它的容器,vector有哪些优势呢?vector的元素是连续存储的,所以vector的遍历速度非常快。访问下一个元素,不需要利用指针间接寻址,这使得vector元素的线性扫描(find()和copy())接近最优。vector支持简单且高效的随机访问,这使得vector上的很多算法(如sort()和)非常高效。vector在oj题目里有一个比较常用的用法:二维数组。

luoshashou_123的博客 1302

奇迹MU单机版开服全流程:从零搭建到分辨率调整(附GM工具使用技巧)

本文详细介绍了奇迹MU单机版从零搭建到分辨率调整的完整流程,包括环境配置、服务端启动、GM工具使用技巧等关键步骤。特别针对现代高分辨率显示器提供了优化方案,帮助玩家轻松搭建个性化游戏环境,重温经典MMORPG的独特魅力。

b3n4m5q6w7的博客 664

c++考题

目录 一、类和对象 1.马云云买淘宝 2.双十一高校夺土豪地位(文件操作) 3.抽象基类Shape和派生类Circle Rectangle Triangle 4.多重继承的二义性及继承方式(各种车类 ) 5.各种车类的一次继承及成员输出(简单题) 6.抽象类和派生类(立体)抽象类指针数组 7.打印时间类(简单题) 二、数组题 1.数组--删除重复然后排序 标准答案算法(有序数...

云端马匪的博客 1924

24、JavaFX MP3 音频播放器开发详解

本文详细介绍了如何使用JavaFX开发一个功能丰富的MP3音频播放器,涵盖文件拖放加载、音频播放控制、音频频谱可视化、进度定位滑块等核心功能,并提供了完整的代码实现和解析。适合希望学习JavaFX多媒体应用开发的开发者参考。

wind6的博客 162

【11】GD32H7xx MPU记录

GD32H7xx系列MPU内存保护单元模块的使用记录

madao1234的博客 867

C++STL容器 ---- 顺序容器之deque、list

顺序容器2---deque:双端队列 1、Deque(doubled-ended queue)是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。 底层数据结构:动态开辟的二维数组,和vector的底层数据结构不同,deque的第二维是按固定大小开辟的,内存扩容时,扩容第一维的数组空间,每次按原空间2倍方式进行扩容,然后把第二维...

Disremembrance的博客 1020

零基础速成simulink代码生成——stateflow基础3

此专栏面向嵌入式工程没有matlab开发经验的人,可以快速学习和实践这门技术。MDB技术,越来越成熟和普遍,从手写代码转到基于模型开发已经是大势,不仅减少开发周期,还增加代码的复用性。汽车领域、医疗和算法建模广泛使用。

不断debug,优化中…… 1705

代码片段

1,计算程序执行时间: #include clock_t start,end; start=clock(); //doing code end=clock(); cout 2.求0到99的随机整数(包含0和99) rand()函数随机产生一个0到MAX的整数。所以要满足上面功能只需要: #include srand((int)time(NULL)); int a=ra

T_W_S的专栏 958

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

北理工计算机专业课2021,2021北理真题回忆 - 北京理工大学 - 王道论坛,专注于计算机考研的点点滴滴! - Powered by Discuz!...

本次考试150分满分。依旧是120数据结构与30分计算机组成原理。数据结构共有八个大题。第一题选择题15个选择,30分,第二题填空题10个填空题,共15个空30分,三四五六是四道简答题各个10分,七八是两道应用题,第七题第一问写出思路,第二问请用C/C++语言写出程序。第八题同样前两问,第三问求时间复杂度和空间复杂度。计算机组成原理,共四道大题。第一题4个选择,8分。第二题,4道小填空题,每道填空...

weixin_36275231的博客 1312

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构填空题 200 题(超详细答案与解析)

本文系统整理了200道数据结构填空题及其详细解析,覆盖了数据结构课程的核心知识点,包括基本概念、线性表、栈与队列、串与数组、广义表、树与二叉树、图、查找、排序及综合应用。每道题均附有标准答案和解析,帮助理解公式来源、运算过程和易错点。文章建议先自主作答再对照解析查漏补缺,通过牢固掌握这些题目,可在期末考试填空题部分做到不失分。适用于期末复习或考研准备,是全面掌握数据结构核心概念的高效资源。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 118

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c语言求单向链表中的最大值,C语言基础 - 实现单向链表

回归C基础实现一个单向链表,并有逆序功能 (大学数据结构经常是这么入门的)//定义单链表结构体typedef struct Node{int value;struct Node *next;}Node;//创建链表Node* createNode(int value,Node *next){Node *node = malloc(sizeof(Node));node->value = val...

weixin_35526110的博客 1763

数据结构核心考点查漏补缺:从概念到代码的面试实战指南

数据结构是计算机科学的基石,它研究数据的组织、存储和操作方式,其核心原理在于通过特定的逻辑结构(如线性表、树、图)和物理结构来高效管理数据。掌握数据结构对于优化算法性能、设计可靠软件系统具有不可替代的技术价值,广泛应用于数据库索引、网络路由、编译器设计等关键场景。本文聚焦于将理论知识转化为扎实的代码能力,针对线性表、栈与队列的相互实现、二叉树非递归遍历、快速排序与堆排序等高频核心考点,提供清晰的代码实现与易错点剖析。通过梳理知识碎片化、代码不扎实等常见痛点,并结合考研复试与春招面试的实际需求,旨在帮助读者快

weixin_30595035的博客 625

利用顺序表构造学生成绩c语言,《C语言程序设计课程设计》题目.doc

1 一元稀疏多项式的运算问题描述:设有两个带头指针的单链表表示两个一元稀疏多项式A、Bn,c1,e1,c2,e2……cn,enn是多项式的项数,ci,ei分别为第i 多项式A和相加,建立多项式A+B,输多项式A和相,建立多项式AB,输多项式A和相,建立多项式A×B,输(1) (2x+5x8-3.1x11)+(7-5x8+11x9)(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5...

weixin_29230773的博客 326

从零开始的C++生活——第四讲

看到了吧,这其实是两个函数,也就是说,函数模板的原理是根据预定模板生成对应函数,本来这个工作是你来完成的,但是由于工作比较简单,就交给编译器了,本质不变,仍然是两个函数,只是省事且不冗余,代码观感更好。模板之于C++有着举足轻重的作用,以往我们写个Swap函数写个Add函数,你由于不同类型的考量需要写一堆,C++即使有重载也十分麻烦,明明大家都是干着差不多的任务,却要写好多次,代码十分冗余,模板就是来解决这个问题的。我可以很明确的告诉你,如果你调试,进的都是这个函数,那能证明这俩是一个函数吗?

dshswra的博客 190

Windows 下 YOLO26 Pose的 TensorRT C++ 部署

本文详细教程YOLO26 Pose在Windows下基于TensorRT的C++部署,涵盖环境配置(VS2022、CUDA 12.9、OpenCV 4.8.1、TensorRT 10.16.1.11)、CMake编译及模型导出(FP32/FP16/INT8),实现预处理快31.8×、推理快14.1×,整流水线达240 fps。支持自定义模型部署与日志分析,复现效果与ultralytics完全对齐,附仓库链接及对比数据。

整理ing 241

同位素下篇:氘、氚、氦-3、聚变燃料循环的 C/M/P 预研——从「氦-3 不是批量燃料」到「氚自给是硬约束」

聚变燃料循环的第一原则,不是「增益」,是「自给」。增益可以降档,自给不能假装。氦-3 不是批量燃料,氚自给是硬约束。氘、氚、氦-3 这条线,用 C/M/P + R1–R7 扫:R1(地球 ³He 供给不闭合,45–192 个增殖堆供 1 个燃烧堆)、R3(氚自给参数未实测锁定)、R5(战略副产品 0.89–3.82 kg/年/单位 外推 170.2 kg/fpy 的批量燃料)、R6(24 h 储备即不可接受;三条硬门不过则整链 ∅_safe)、R7(月球连续流程未演示,没有第三条已铺好的通道)。

Liaiyang66的博客 345

吉林安全员 C 证模拟试卷题库 仿真演练提前适应考试节奏

安全员 C 证的备考,知识点掌握是基础,整卷仿真演练是把掌握转化为得分的关键环节。模拟试卷不是用来"刷数量"的,而是用来暴露问题、修正节奏、巩固易错点的工具。限时、复盘、重做,三个动作做到位,考场上的从容才有来源。

renrenti的博客 221

1TOPS+WiFi6双频+千兆PHY,兼容树莓派CM4/CM5引脚|触觉智能SOM6208核心板

配套 AMP、Docker、IGH-Ethercat、ROS、OpenCV、YOLOv5、MQTT、RT-Linux、蓝牙等完整开发案例手册。全功能接口覆盖:8路UART、2路CAN、2路网口(板载千兆PHY+ RGMII拓展)、PCIe2.1/USB3.0、2路USB2.0、MIPI DSI/LVDS显示、多路MIPI CSI摄像头输入,SPI、I2C、I2S、SDIO、PWM、GPIO一应俱全;③连接器形态更友好。-工业HMI、工业PLC、能源集中器、医疗显控、电力储能/DTU、边缘计算网关。

Industio_CSDN的博客 477

拼多多校招笔试真题 10.18 - 断缆两侧负荷积(C++/Py/Java /Js/Go)

拼多多笔试 10月18号真题,拼多多笔试第四题【断缆两侧负荷积】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。拼多多技术岗笔试真题【断缆两侧负荷积】多语言题解。

qq_45776114的博客 491

系统活动一抓留存!深入 Linux C/C++ 调试工具之 sysdig

sysdig是开源的Linux系统可见性工具,通过内核探针捕获系统调用与事件,支持实时监控、离线回放(.scap)、过滤分析及Chisel脚本聚合。相比strace仅跟踪单进程,sysdig可全机/容器级观测,适用于故障复盘、安全排查、容器诊断等场景。核心能力包括事件捕获、灵活过滤、eBPF支持与Chisel统计,与Falco协同实现“可观测+安全告警”。推荐工作流:捕获→回放→过滤→分析,结合-topprocs_cpu、netstat等Chisel快速定位问题。

coder_zjy的博客 352
上一篇: 【带头学C++】----- 三、指针章 ---- 3.6 指针数组
下一篇: 【带头学C++】----- 三、指针章 ---- 3.9 数组作为函数的参数
程序小白Erike.
博客等级 码龄7年 1876粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小白Erike.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值