c语言传递函数指针

Python018

c语言传递函数指针,第1张

intcmp是和GetKeyFunc_t对应起来的。

而你现在错在了CmpFunc_t这个函数参数上了。

你把怎样的函数参数指针传给了BST_t *newBST?

你没交代清楚啊,你把错误指针传给newBST函数的第一个参数,编译器肯定报错了。你给了那么多代码,关键你把什么传给了BST_t *newBST的第一个参数?给一下你调用这个newBST函数的代码,而且要你传给该函数第一个参数的参数定义。

另外给个建议:定义函数时,记得对传进来的参数进行合法性检验。多加几行代码是很有必要的,能增强函数的健壮性。(微软也好,ISO也好,都对大部分函数设计时要求做必要的合法检验)

数组名就是指针,例如:

#include <stdio.h>

void pr(char *p)

{

printf(p)

}

void main(void)

{

char s[] = "abc"

pr(s)

}

扩展资料:

注意事项

非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:

int main(int argc,char* argv[])

{

/* code here */

}

int main(int argc,char** argv)

{

/* code here */

}

两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。

所谓对应其实是参数形式上的对应。上面的两个函数都要求传递一个指针类型。并且还是双指针类型。c的编译器执行的是字面上的语义检查,并不实际追究这个参数真是子函数需要的。而你传递参数的正确与否在运行时才能反映出来。尤其是指针,传递一个错误的指针基本会导致你的程序运行不成功,或者直接终止运行。

上面你的代码中你给你的子函数传递一个int 类型的值,编译器肯定会报错,但是你用显式类型转换将int转换成双指针类型就骗过了编译器。比如这样:

int test=0x00400000

shell_sort((char**)test,n)

编译通过,运行必然出错。