前言
有一个问题之前一直不明白,今天突然明白了。
问题
之前学线性表时,有建立链表、插入、删除、查找元素等操作。以下是函数原型。
InitList(*L):建立一个空的线性表L。
ListInsert(*L, i, e):在线性表L中的第i个位置插入新元素e。
ListDelete(*L, i, *e):删除线性表L中第i个位置元素,并用e返回其值。
LocateElem(L, e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。
我们看先*L和L这两个参数,为什么一些函数用线性表的指针做参数,另一些函数直接用线性表本身做参数?
解答
我看到有一本书上是这样说的:当你传递一个参数给函数的时候,这个参数会不会在函数内被改动决定了使用什么参数形式。如果需要被改动,则需要传递指向这个参数的指针。如果不用被改动,可以直接传递这个参数。
看一下这个函数LocateElem(L, e),这个函数的功能是查找元素,查找过程不需要改动线性表L,所以直接传递线性表L本身,当然如果传递线性表L指针也是可以的。再看一下这个函数ListInsert(*L, i, e),这个函数的功能是在线性表中插入元素,需要在函数内改动线性表L,所以传递的是线性表L的指针。在这里如果直接传递线性表L的话,就不会对线性表有改动。如果不懂得话,建议再看一下C语言的形参和实参。
后续
最近又学习了Sys Tick,这里记录一下。
1、SysTick 配置库函数
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
// 不可能的重装载值,超出范围
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk