嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)

2024-01-29 19:36

本文主要是介绍嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 指针数组:

int *a[5];
char *str[5];

        指针数组主要用来操作字符串数组,通常将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。

        二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组

2. 指针和二维数组的关系:

int a[2][3] = {0};
int *p = NULL;
int (*q)[3] = NULL;p = &a[0][0];
p = a[0];
p = *a;
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]

        二维数组传参:

int a[2][3] = {0};
int Fun(int (*parray)[3], int len);char str[5][32] = {0};
int Fun(char (*pstr)[32], int len);

3. 二级指针:

        1. 指针数组传参时:

int *a[5] = {NULL};    //a是int **型
char *pstr[5] = {"hello", "world", "how", "are", "you"};  //str是char **型int Fun(char **ppstr, int len);

作业:

        1. 现有二维数组 char str[5][32] = {"hello", "world", "how", "are", "you"};

                封装函数实现对所有字符串的排序

                封装函数实现对所有字符串的打印

#include <stdio.h>
#include <string.h>int InputStr(char (*pstr)[32], int len)
{int i = 0;for(i = 0; i < len; i++){gets(pstr[i]);}return 0;
}int SortStr(char (*pstr)[32], int len)
{int i = 0;int j = 0;char tmp[32] = {0};for(j = 0; j < len-1; j++){for(i = 0; i < len-1-j; i++){if(strcmp(pstr[i], pstr[i+1]) > 0){strcpy(tmp, pstr[i]);strcpy(pstr[i], pstr[i+1]);strcpy(pstr[i+1], tmp);}}}return 0;
}int OutputStr(char (*pstr)[32], int len)
{int i = 0;for(i = 0; i < len; i++){printf("%s\n",pstr[i]);}return 0;
}int main(void)
{char str[5][32] = {0};InputStr(str,5);SortStr(str,5);printf("==================\n");OutputStr(str,5);return 0;
}

        2. 现有指针数组 char *pstr[5] = {"hello", "world", "how", "are", "you"};

                封装函数实现对所有字符串的排序

                封装函数实现对所有字符串的打印

#include <stdio.h>
#include <string.h>int SortStr(char **pstr, int len)
{int i = 0;int j = 0;char *tmp = NULL;for(j = 0; j < len-1; j++){for(i = 0; i < len-1-j; i++){if(strcmp(pstr[i], pstr[i+1]) > 0){tmp = pstr[i];pstr[i] = pstr[i+1];pstr[i+1] = tmp;}}}return 0;
}int OutputStr(char **pstr, int len)
{int i = 0;for(i = 0; i < len; i++){printf("%s\n",pstr[i]);}return 0;
}int main(void)
{char *str[5] = {"Hello", "World", "How", "Are", "You"};SortStr(str,5);OutputStr(str,5);return 0;
}

这篇关于嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657962

相关文章

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE