嵌入式学习Day12---C语言提升

目录

一、指针数组

1.1.什么是指针数组 

2.2. 格式

2.3.存储 

2.4.与字符型二维数组相比

2.5.什么时候使用指针数组 

2.6.练习

二、数组指针 

2.1.什么是数组指针 

2.2.格式

 2.3.一维数组

2.3.特点 

2.4.什么时候使用

三、指针和数组的关系 

3.1.一维数组和指针 

3.2. 二维数组和指针

四、二级指针

4.1.含义

4.2.实际的二级指针 

4.3.什么时候使用  

五、总结 


一、指针数组

1.1.什么是指针数组 

        指针数组是数组 ,而数组中的每个元素是指针

2.2. 格式

int *arry[5];

2.3.存储 

        由于指针数组的类型为指针(int *),因此指针数组的每个元素占 8个字节。

        int *a[5];故此该指针数组占右8*5=40字节的空间。

2.4.与字符型二维数组相比

         字符型二维数组用来存储字符串数组;

         指针数组用来操作字符串数组;

2.5.什么时候使用指针数组 

                操作字符串数组时

2.6.练习

         一起来加深一下指针数组的印象

        1.定义一个指针数组,并初始化为12个月英文字符串首地址,从终端输入1 - 12对应的数字,
 打印出其对应的英文形式。

#include <stdio.h>int main(void)
{char *p[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};int n = 0;scanf("%d", &n);printf("%s\n", p[n-1]);return 0;
}


         2.再次练习终端接受字符串,使用指针数组对字符串数组的元素进行冒泡排序并打印结果,并使用数组的方法打印字符串。

#include <stdio.h>
#include <string.h>int main(void)
{char str[5][32] = {0};char *p[5] = {str[0], str[1], str[2], str[3], str[4]};char *q = NULL;int i = 0;int j = 0;for(i = 0; i < 5; i++){gets(str[i]);}for(j = 0; j < 4; j++){for(i = 0; i < 4 -j; i++){if(strcmp(p[i], p[i+1]) > 0){q = p[i];p[i] = p[i+1];p[i+1] = q;}}}printf("-----------------------------------\n");for(i = 0; i < 5; i++){printf("%s\n", p[i]);}printf("-----------------------------------\n");for(i = 0; i < 5; i++){printf("%s\n", str[i]);}return 0;
}

 你会发现操作字符串时使用指针数组很方便,在使用冒泡排序时,原数组方法它要交换字符串来实现,而当字符串过大过多时效率很底;而指针数组在活得元素组字符串的地址后,交换时只需要交换地址就行效率很高。

二、数组指针 

2.1.什么是数组指针 

  数组指针是指针,指针指向一个数组(二级指针)

2.2.格式

int (*p)[5] = NULL;

 2.3.一维数组

         一维数组的数组名是指向第一个元素的指针常量

int a[5] = {1,2,3,4,5};a == &a[0]

        一般情况,可以把数组名a理解为int *,但是存在两种特殊的情况不可以这么理解:        

        ·sizeof运算时 

                sizeof(a)  =  20

                sizeof(int *) = 8

        ·&运算时

                &a == int(*) [5](对一维数组取&会升级为数组指针)

                &int * == int **

2.3.特点 

        1.对一维数组&得到数组指针

        2.数组指针取*操作,类型不变,值降为指向数组第一个元素的指针

        3.数组指针的变化量为整个数组大小 

2.4.什么时候使用

        二维数组传参数时,传数组指针和长度 

int fun(int (*parry)[3],int len);int a[2][3] = {0};fun(a, 2);

三、指针和数组的关系 

3.1.一维数组和指针 

int a[5] = {1,2,3,4,5};int *p = NULL;p = a; / p = &a[0];

        访问第n个元素的方式: 

a[n] == *(a+n) == *(p+n) == p[n]

3.2. 二维数组和指针

int a[2][3] = {1,2,3,4,5,6};int *p = NULL;int (*p)[3] = NULL;p = &a[0][0];p = a[0];q = a;

         由于a[0]是由上图中的a[0][0]、a[0][1]、a[0][2]三个元素组成的一维数组,又有一维数组的数组名式是指向第一个元素的指针,故此p = a[0];

         由于a[0][0]是a[0]数组的第一个元素,故此p = &a[0][0];

         又由于a是由a[0]和a[1]两个一维数组组成的一维数组,又有一维数组的数组名式是指向第一个元素的指针,故此:q = a;

         现在要访问第m行n列的元素,可以怎样访问:

a[m][n]*(a[m]+n)*(*(a+m)+n)*(p+m*N+n)*(q[m]+n)*(*(q+m)+n)q[m][n]

四、二级指针

4.1.含义

        指向指针变量的指针

4.2.实际的二级指针 

        1.函数体内想修改函数体外指针变量值的时候,传指针变量的地址即二级指针

         2.指针数组的数组名是指向数组第一个元素的指针,即指向指针的指针也就是二级指针 

4.3.什么时候使用  

        1.函数体内想修改外部指针变量值传入二级指针 

#include <stdio.h>int fun(char **pptmp)
{*pptmp = "hello world";return 0;
}int main(void)
{char *p = NULL;fun(&p);printf("p = %s\n", p);return 0;
}

结果为:p = hello world

        2.指针数组的数组名是二级指针 

五、总结 

        2024年7月24日,已经学习了12天啦!C语言的学习也接近尾声了。今天主要学习了指针数组、数组指针、二级指针,时指针中算是难的部分也是C语言中算是的难的部分了。努努力,争取今天消化了。

        加油!

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

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

相关文章

ps制作镂空文字

1、创建文字。 2&#xff0c;栅格化文字 2、载入选取 3.选择》修改》收缩 4、然后再点击删除键&#xff0c;镂空文字效果就做好了。 同样适用于简单的图片logo

AI智能名片小程序在预测性产品管理与营销中的深度应用探索

摘要&#xff1a;本文深入探讨了AI智能名片小程序在预测性产品管理与营销中的广泛应用及其带来的深远影响。通过详细分析该技术在数据收集、市场分析、用户画像构建、个性化推荐、客户关系管理以及风险预测等方面的具体实践&#xff0c;本文揭示了AI智能名片小程序如何助力企业…

刚起步的小型海外仓有必要上WMS系统吗?答案来了

首先&#xff0c;这里的自动化主要是指将库存管理、SKU管理&#xff0c;一件代发、财务管理等海外仓的日常作业流程通过WMS系统实现的自动化。 而不是指海外仓自动化机器人、智能导轨等硬件设备。 文章会针对刚起步的一些小型海外仓是否有必要使用WMS系统进行讨论&#xff0c…

捷报来袭!上半年HCIE通过120人!证书量总计1767

智汇云校捷报 —上半年华为认证证书量1767本— 2024年上半年&#xff0c;云校HCIA、HCIP、HCIE证书量总计1767本&#xff01; HCIA&#xff1a;1240本 HCIP&#xff1a;407本 HCIE&#xff1a;120本 祝贺以下学员通过HCIE认证&#xff01; 欢迎有考证需求的学员 咨询云校…

Python文件打包exe文件

作者的一点话 你是否还在为py文件无法像其他可视化项目展示出来&#xff0c;制造图形界面的移动使用&#xff0c;那接下来我会与你一同使用它&#xff0c;并进行study&#xff0c;如有困惑&#xff0c;可随时联系。 然后&#xff0c;需要使用pysimplgui&#xff0c;如果…

[网络编程】网络编程的基础使用

系列文章目录 1、 初识网络 网络编程套接字 系列文章目录前言一、TCP和UDP协议的引入二、UDP网络编程1.Java中的UDP2.UDP回显代码案例3.UDP网络编程的注意事项 三、TCP网络编程1.TCP回显代码案例2.TCP多线程使用 总结 前言 在学习完基础的网络知识后&#xff0c;完成跨主机通…

元器件基础学习笔记——二极管基础

一、二极管基础 二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件&#xff0c;具有单向导电性&#xff0c;是现代电子技术的基石。它在电子电路中扮演着至关重要的角色&#xff0c;通过与电阻、电容、电感等元器件的合理连接&#xff0c;能够实现整流、检波、限幅、稳压等…

Midjourney只需输入描述性文本,就能生成栩栩如生的图像

前言 Midjourney 是一款基于人工智能的图像生成工具&#xff0c;由 Midjourney 研究实验室开发。它最初在2022年3月面世&#xff0c;并在同年7月12日开始公开测试。Midjourney 的核心功能是能够根据用户提供的文本提示&#xff08;prompt&#xff09;&#xff0c;利用其内置的…

【软件测试】--接口自动化测试

1. 接口自动化 1.1 概念 接口测试&#xff1a;是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换、传递和控制管理过程&#xff0c;以及相互逻辑依赖关系 自动化测试&#xff1a;是把以人为驱动的测试行为转化为机器执行的一种过程 接口自动化测试&#xff1…

【详细】Ubuntu下安装qt5

Ubuntu下安装qt5 一. QT安装环境准备1、判断gcc是否安装2、安装g3、安装clang编译器4、安装 clang 5、安装make6、安装make-guile7、安装cmake 二. QT5安装1、安装Qt5的组件2、安装Qt的开发工具3、安装qtcreator4、安装qt55、安装qt charts&#xff08;可选&#xff09; 三、安…

国服最强文字转音频?Fish Speech

官网文档与示例 Fish Speech V1.2 是一款领先的文本到语音 (TTS) 模型&#xff0c;使用 30 万小时的英语、中文和日语音频数据进行训练。我尝试用1066运行&#xff0c;但是质量不尽如人意&#xff0c;建议使用RTX系列的显卡进行推理。 使用结果展示 text """20…

WPF项目实战视频《三》(主要为客户端软件界面设计)

20.WPF项目实战&#xff08;项目介绍&#xff09; 1.WEB API&#xff1a;接口&#xff0c;如何获取数据&#xff08;增删改查&#xff09; 2.客户端 项目功能&#xff1a; 待办&#xff0c;备忘录&#xff0c;汇总&#xff0c;完成比例&#xff0c;设置系统主题等。 21.WPF项…

nodejs与npm版本对应表

Node.js — Node.js 版本 (nodejs.org)

Springboot集成微信公众号模板通知java

先看效果 1、微信模板消息官方文档 微信公众平台 2、申请微信公众平台接口测试账号 微信公众平台 3、创建3个实体 &#xff08;1&#xff09;、ConfigBean import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configurat…

python中,jsonpath提取数据的时候出现TypeError: ‘bool‘ object is not subscriptable怎么解决

json格式如下&#xff1a; { success: True, result: { codeInfo: { code: 0, msg: 成功 }, uploadToken: { resId: rzJRpo, endpoint: https://sit-api-ypsx-resource.ypsx-internal.com/r…

stm32入门-----DMA直接存储器存取(上——理论篇)

目录 前言 DMA 1.简介 2.存储器映像 3.DMA结构 4.数据宽度与对齐 5.DMA工作示例 前言 本期我们就开始学习DMA直接存储器存取&#xff0c;DMA是一个数据装运的小助手&#xff0c;执行数据的搬运处理&#xff0c;减少了CPU的负担&#xff0c;在stm32中担当重要的工作。在前…

pypi如何上传自己的代码记录

目录 一. 注册pypi账号并创建token 1. 注册pypi账号并创建token 2. Pypi账号注册 3. 邮箱验证 ​编辑 4. 重新生成恢复代码 5. 输入账号密码 ​编辑 6. 保存code并继续 ​编辑7. 输入一行即可&#xff0c;然后点击verify 8. 点击左方目录内的account setting&#xff…

基于微信小程序的高校排课系统 /基于微信小程序的排课管理系统/课程管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

爱快路由的dns强制客户端代理真是个强大的功能

大致情况是这样的&#xff1a;同事说在linux服务器/etc/resolv.conf上随便写个IP地址【不在线的】&#xff0c;dns地址也能解析&#xff0c;让我帮忙查查。 我看了下也感觉纳闷&#xff0c;试了下不光在服务器上&#xff0c;我本地的pc随便设置了个dns解析也是一样的。 通过wir…

解决Qt6 error: The kit needs to define a CMake tool to parse this project.

cmake对于Qt6来说很重要&#xff0c;所以学会cmake是必须的。 上述错误&#xff0c;就是我在Windows10下运行cmake项目总是报错的一个问题。 明明路径已经配好了&#xff0c;却总是报错。 具体原因可能和cmake的版本&#xff0c;以及是否设置为默认有关。另外也和QtCreator中…