从零开始学习嵌入式----C语言指针数组

C语言指针数组,彻底搞懂它!

       指针在 C 语言中是一个强大的工具,而指针数组更是锦上添花,它为我们处理大量数据,特别是字符串,提供了极大的便利。但是,指针数组的概念也常常令初学者感到困惑。本文将带你深入浅出地理解 C 语言指针数组,并通过实例演示其强大的功能。

一、什么是指针数组?

       在 C 语言中,数组是用来存储相同数据类型元素的集合。而指针数组,顾名思义,就是一个存储指针的数组。换句话说,指针数组中的每一个元素都是一个指针,这些指针可以指向任何数据类型的变量,例如整型、字符型、甚至是其他数组。

声明指针数组:

声明指针数组的语法如下:

数据类型 *数组名[数组大小];

  • 数据类型: 指针所指向的数据类型。

  • 数组名: 数组的名称。

  • 数组大小: 数组中元素的个数。

例如,要声明一个包含 5 个指向整型变量的指针数组,可以这样写:

int *ptr_array[5];

初始化指针数组:

指针数组的初始化可以在声明时进行,也可以在程序的其他部分进行。

  • 声明时初始化:

int a = 10, b = 20, c = 30;
int *ptr_array[3] = {&a, &b, &c};

       这里我们声明了一个包含三个指向整型变量的指针的数组 ptr_array,并分别用变量 abc 的地址初始化了数组的三个元素。

  • 程序其他部分初始化:

int a = 10, b = 20, c = 30;
int *ptr_array[3];
ptr_array[0] = &a;
ptr_array[1] = &b;
ptr_array[2] = &c;

这里我们先声明了指针数组 ptr_array,然后在程序的其他部分分别为数组的每个元素赋值。

二、 指针数组的应用场景

指针数组在 C 语言中有着广泛的应用,以下是一些常见的应用场景:

1) 处理字符串数组

       C 语言中没有真正的字符串类型,字符串实际上是以空字符 (\0) 结尾的字符数组。指针数组可以方便地存储和处理多个字符串。

char *names[] = {「Alice」,「Bob」,「Charlie」
};#  #
for (int i = 0; i < 3; i++) {printf(「%s
」, names[i]);
}

       在这个例子中,names 是一个指针数组,它存储了三个指向字符串常量的指针。通过循环遍历数组,我们可以方便地访问和打印每个字符串。

2)动态内存分配

指针数组可以用来存储动态分配的内存块的地址,例如:

int *ptr_array[5];
for (int i = 0; i < 5; i++) {ptr_array[i] = (int *)malloc(sizeof(int));if (ptr_array[i] == NULL) {// 处理内存分配失败}*ptr_array[i] = i * 10;
}#  #
// ... 使用动态分配的内存 ...#  #
// 释放内存
for (int i = 0; i < 5; i++) {free(ptr_array[i]);
}

       在这个例子中,我们使用 malloc 函数动态分配了 5 个整型内存块,并将它们的地址存储在指针数组 ptr_array 中。使用完内存后,我们使用 free 函数释放了这些内存。

3)函数指针数组

指针数组也可以存储函数指针,这在实现回调函数、状态机等场景中非常有用。

int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }#  #
int (*operations[2])(int, int) = {add, subtract};#  #
int result = operations[0](10, 5); // result = 15

      在这个例子中,我们定义了一个包含两个函数指针的数组 operations,这两个指针分别指向 add 函数和 subtract 函数。然后我们可以通过数组下标来调用不同的函数。

3. 总结

       指针数组是 C 语言中一个强大的工具,它为我们处理复杂的数据结构提供了极大的便利。理解指针数组的概念和应用场景对于编写高效、灵活的 C 代码至关重要。希望本文能够帮助你更好地理解和使用 C 语言指针数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab入门学习

一、什么是matlab MATLAB&#xff08;matrix laboratory矩阵实验室&#xff09;是一款商用数学软件&#xff0c;主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。可用于数据分析、深度学习、图像处理与计算机视觉、量化金融与风险管理等领域。 二、matlab和pyt…

图数据库 - Neo4j简介

深入理解 Neo4j 与 Cypher 语法 什么是 Neo4j Neo4j 是一个基于图的数据库管理系统&#xff0c;它使用图形理论来表示数据关系。这种数据库与传统的关系型数据库不同&#xff0c;它更适合处理高度互联的数据结构。 基本概念 图&#xff1a;在 Neo4j 中&#xff0c;数据以图的…

WEB07Vue+Ajax

1. Vue概述 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09;&#xff0c;是一款用于构建用户界面的渐进式的JavaScript框架&#xff08;官方网站&#xff1a;https://cn.vuejs.org&#xff09;。 在上面的这句话中呢&#xff0c;出现了三个词&#xff0c;分别是&#x…

flask-login会话保持实现

目录 1、实现原理 1. 用户登录过程 2. 判断用户是否登录的原理 3. 注销过程 2、示例使用 1、实现原理 1. 用户登录过程 当用户通过表单提交用户名和密码进行登录时&#xff0c;后端会进行身份验证。如果验证通过&#xff0c;Flask-Login 会执行以下操作&#xff1a; …

宝兰德参编金融智能体标准,深耕大模型场景化落地

随着数智化浪潮的不断推进&#xff0c;人工智能技术正深刻影响着金融服务的模式和流程&#xff0c;金融智能体在大模型的加持下&#xff0c;业务场景的应用能力得到强化。然而&#xff0c;作为新型技术&#xff0c;金融智能体在隐私保护、透明性、数据泄露等方面仍存在诸多风险…

枸杞糖基转移酶--文献精读31

Functional and structural dissection of glycosyltransferases underlying the glycodiversity of wolfberry-derived bioactive ingredients lycibarbarspermidines 功能和结构分析导致枸杞来源的生物活性成分&#xff08;如lycibarbarspermidines类化合物&#xff09;糖基…

SQL注入安全漏洞与防御策略

1.引言 SQL注入&#xff08;SQL Injection&#xff09;是一种广泛存在的网络安全攻击手段&#xff0c;它允许攻击者通过向应用程序的数据库查询中插入或“注入”恶意的SQL代码片段&#xff0c;从而操控后端数据库&#xff0c;执行未授权的数据库操作&#xff0c;如数据泄露、数…

C++入门基础知识2

1.引用 1.1引用的使用 1.引用在实践中主要是引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象 2.引用传参跟指针传参功能是类似的&#xff0c;引用传参相对更方便一些 3.引用和指针在实践中相辅相成&#xff0c;功能有重叠性&#xff0c;各有特…

ES6 Module 的语法(十二)

ES6&#xff08;ECMAScript 2015&#xff09;引入了模块&#xff08;Modules&#xff09;的概念&#xff0c;使得JavaScript代码可以更容易地组织和复用。 1. export 关键字 命名导出 (Named Exports) 你可以使用 export 关键字导出多个变量、函数或类。 // module.js export…

嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)

1. 项目概述 本项目旨在开发一套先进的智能工厂设备监控系统&#xff0c;集成嵌入式技术、工业通信协议和人机界面等多项技术&#xff0c;实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率&#xff0c;大幅降低维护成本&…

【第33章】MyBatis-Plus之预防安全漏洞

文章目录 前言一、什么是漏洞&#xff1f;二、如何预防漏洞1.表字段部分2.字段参数/变量部分3. 使用工具类预防 三、关于恶意漏洞的说明总结 前言 软件漏洞可以对系统造成严重危害&#xff0c;如果被人恶意利用&#xff0c;会导致病毒感染、数据泄漏或损坏的风险&#xff0c;还…

基于AT89C51单片机的16×16点阵LED显示器字符滚动显示设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的1616点阵LED显示器字符滚动显示设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 仿真效果图 仿真图 代码 系统论文 资源下载 设计的内容和要求 熟悉51系…

thinkphp5多层with关联查询错误问题

官方文档 https://www.kancloud.cn/manual/thinkphp5/139045 V5.0.7版本以上&#xff0c;支持使用数组方式定义嵌套预载入&#xff0c;例如下面的预载入要同时获取用户的Profile关联模型的Phone、Job和Img子关联模型数据&#xff1a; $list User::with([profile>[phone,j…

TS类型声明文件(一)如何在ts npm包项目中生成 d.ts 文件

现在TS项目很多&#xff0c;如果你开发的npm包不支持类型声明文件&#xff0c;对使用ts的开发者不太友好&#xff0c;开发者无法获得ts类型提示。如何在自己的 npm 包中自带 .d.ts 文件&#xff0c;以确保使用者不需要额外配置 tsconfig.json 就能获得类型提示&#xff0c;以下…

Python练习题(3)

1.使用requests模块获取这个json文件http://java-api.super-yx.com/html/hello.json 2.将获取到的json转为dict 3.将dict保存为hello.json文件 4.用文件流写一个copy(src,dst)函数,复制hello.json到C:\hello.json import requests import jsondef copy(src, dst):read_file o…

【typedb】例子:药物发现 1: 模式导入

typedb-examples/drug-discovery/ Drug discovery监听0.0.0.0:1729 但这么连接肯定不行: localhost:1729 可以: 一直无法点击schema图标:先创建一个数据库 选中数据库: 选中后就可以了:

我的第128天创作纪念日

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;初阶数据结构笔记专栏&#xff1a; 初阶数据结构笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章…

演示:【Avalonia-Controls】Avalonia皮肤,主题,自定义控件,数据库,系统模块资源库

一、目的&#xff1a;分享一个Avalonia皮肤&#xff0c;主题&#xff0c;自定义控件&#xff0c;数据库&#xff0c;系统模块资源库 开源地址&#xff1a; GitHub - HeBianGu/Avalonia-Controls: Avalonia控件库 Nuget包地址&#xff1a; NuGet Gallery | Packages matchin…

02MFC画笔/画刷/画椭圆/圆/(延时)文字

文章目录 画实心矩形自定义画布设计及使用连续画线及自定义定义变量扇形画椭圆/圆输出颜色文本定时器与定时事件 画实心矩形 自定义画布设计及使用 连续画线及自定义定义变量 扇形 画椭圆/圆 输出颜色文本 定时器与定时事件

大模型时代的目标检测

https://zhuanlan.zhihu.com/p/663703934https://zhuanlan.zhihu.com/p/6637039341.open set/open word/ood 这个任务是指在实际应用上可以检测任何前景物体&#xff0c;但是有些不需要预测类别&#xff0c;只要检测出框就行。在很多场合也有应用场景&#xff0c;有点像类无关…