mystrlen

mystrcmp

mystrcat

第14-16同样可以简化为:  

 *pstr1++ = *pstr2++;

mystrcpy

可以简化操作,直接使指针自加,(第14行)

mystrswap

在函数体内部定义一个头指针,和一个尾指针。

第一个方法:定义时就将指针位置确定好,头指针指向数组第一个元素,尾指针指向最后一个字符  pstr + len -1;

不能使用pstr +len,因为它指向的是'\0'的位置,

第二个方法:将头指针和尾指针定义时都指向第一个元素,使用whie循环,当尾指针不等于(!=)'\0'时进入循环,将尾指针自加,当尾指针指向'\0'时,就停止循环。

这时尾指针指向'\0',再让尾指针自减指向最后一个字符。

封装一个函数实现给定a和n计算结果并返回 a:3 n:5

3 + 33 + 333 + 3333 + 33333 = 37035

0*10 + 3

3*10 + 3

33*10 + 3

333*10 + 3

3333*10 + 3

33333*10 + 3

函数指针:

是指针,指针指向一个函数

int (*p) (int x, int y) = NULL;

*p  是一个指针,占8个字节,x和y是形参

函数的函数名就是指向这个函数的指针

函数指针的基本操作语法:

函数指针的用法:

二级指针

二级指针是指向一级指针变量的指针

int **q;

定义一个指针变量q,

占8个字节空间,指向一个指着变量空间,即指向以及指针变量的指针,也就是二级指针

使用场景:

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

指针数组传参,数组的数组名是指向数组第一个元素的指针,第一个元素是指针,所以数组名为指向指针的指针,即二级指针

指针数组及数组指针

指针数组

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

int *a[5]

定义一个数组,占40个字节,数组名为5,数组中每个元素是int * 型的指针

整型指针数组用的少,用的最多的是字符型指针数组

char *pstr[5];

存放字符串使用字符型数组,操作字符串使用指针数组

存放字符串使用二维字符串数组,操作字符串数组使用指针数组

利用指针数组操作二维数组中的字符串实现排序:

二维数组存放字符串数组

指针数组元素变化代替二维数组字符串变化,提高程序效率

指针数组的用法:

数组指针

是指针,指针正向整个数组

int (*a)[5];

定义一个指针,占8个字节,指针变量名为a,是指向数组20个字节空间的指针

对一维数组数组名&:值不变,类型升级为指向整个数组的指针

对指针数组*:值不变,类型降级为指向数组第一个元素的指针

a不能理解为int *型的两种情况

1、 sizeof : 获得数据类型、变量所占字节

2、&:  对Int *型取地址得到 int **型;对数组a取地址得到数组的首地址,类型为int (*p)[5]

对一维数组数组名&,值不变,类型升级为指向整个数组的指针,&a+1指向20个字节后的地址(?型)。

对指针数组取*,值不变,类型降级为指向数组第一个元素的指针 int *

数组指针使用场景

一维数组和指针的关系

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

二维数组和指针的关系

数组的数组名是指向数组第一行元素的数组指针

a的类型是int (*)

&a是指向二维数组中第一行的指针

&a+1指向第二行的指针

*a 值不变,类型降级,指向第一行第一个元素的指针。等价于   a[0]   等价于   *(a+0)  类型是  int *

*a+1   指向第一行第二个元素的指针   等价于  a[0]+1

*(a+1)值不变,类型降级,指向第二行第一个元素的指针,等价于a[1]    类型是  int *

a[1]+1指向第二行第二个元素

等价于

三种赋值都可以

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐