C方面的指针问题,老生常谈了啊
发布网友
发布时间:2023-05-04 16:44
我来回答
共4个回答
热心网友
时间:2023-11-02 16:55
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType));
整个表达一下:一个名为LocateElem的函数,返回值为int型,它有三个参数,Sqlist型,Elem型,其实最后一个参数的意思是一个指向函数的指针,指针指向的函数返回值为Status型,有两个Elem型参数。Status(*compare)(ElemType,ElemType)其实这个就是传说中的回调函数;具体自己百度一下就知道了。。回调函数!!!
这个(*p).length和L.length有什么区别?
(*p).length和L.length和p->length代表的意思是一样的,都是指向了结构体成员.其实书上有很详细的讲解。你需要仔细看
全部手打!追问可以这样理解么,LocateElem那个函数也可以这样写:
int LocateElem(SqList L,ElemType e)
{
Status compare(ElemType,ElemType);
ElemType *p;
int i = 1;
p = L.elem;
while(i <= L.length && !compare(*p++,e))
i++;
if(i <= L.length)
return i;
else
return 0;
}
追答是的,会举一反三了啊。。
热心网友
时间:2023-11-02 16:56
你说对了。这就是典型的指向函数的指针的定义方法。
Status(*compare)(ElemType,ElemType)很怪啊?
如果写成
Status F (ElemType, ElemType)
这样看没问题吧?
现在(*compare)其实就是代表原来那个F。追问(*p).length和L.length有什么区别?
热心网友
时间:2023-11-02 16:56
建议楼主回头拿起书本把指针那章再好好看看,再去看数据结构。
热心网友
时间:2023-11-02 16:57
不理解你想知道什么"区别”, 这两个不是指的东一个对象 ,*p不一定有效而后者有效