函数指针数组指针如何作为参数写入一个函数内部,比如函数指针数组为int(*Cmp[5])(Con*,const char*,int) = {Cmp_name,Cmp_sex ,Cmp_age,Cmp_tel,Cmp_adress }; ,第一个问题将这个函数指针数组作为该参数如何存放在一个函数内,比如这个函数为void Pp_Delask(),第二个问题,在这个函数内部想调用函数指针数组中的一个函数如何表达这个函数
时间: 2023-03-13 16:30:47 浏览: 83
答:将函数指针数组作为参数存放在函数内部可以使用函数参数传递的方式,比如在函数Pp_Delask()中声明一个参数int(*Cmp[5])(Con*,const char*,int),在调用函数时将函数指针数组传入该参数即可。调用函数指针数组中的一个函数可以使用指针的方式,比如在函数Pp_Delask()中定义一个函数指针int(*p)(Con*,const char*,int),将它指向函数指针数组中的一个函数,比如(*p)=Cmp_name,然后直接调用(*p)(Con*,const char*,int)即可。
相关问题
使用c++通用指针类型参数实现类属的选择排序函数。
好的,使用通用指针类型参数实现类属的选择排序函数可以这样定义:
```c++
void selectionSort(void* base, size_t num, size_t size, int (*cmp)(const void*, const void*))
{
char* p = static_cast<char*>(base);
for (size_t i = 0; i < num - 1; ++i) {
size_t minIndex = i;
for (size_t j = i + 1; j < num; ++j) {
if (cmp(p + j * size, p + minIndex * size) < 0) {
minIndex = j;
}
}
if (minIndex != i) {
std::swap_ranges(p + i * size, p + (i + 1) * size, p + minIndex * size);
}
}
}
```
这个函数的参数有四个:
1. `base`:要排序的数组的起始地址,类型是 `void*`。
2. `num`:要排序的元素个数,类型是 `size_t`。
3. `size`:每个元素的大小,类型是 `size_t`。
4. `cmp`:比较函数指针,类型是 `int (*)(const void*, const void*)`。
函数的实现和一般的选择排序类似,只不过在比较两个元素的大小时需要使用通用指针类型,即指向 `void` 类型的指针。因为 `void` 类型指针可以指向任何类型的数据,所以可以通过 `static_cast<char*>` 将 `void*` 类型的指针转换成 `char*` 类型的指针,然后通过指针运算来访问数组中的元素。
使用这个函数时,需要传入一个比较函数指针,比较函数的类型是 `int (*)(const void*, const void*)`,即指向参数为 `const void*` 类型的两个指针的函数指针,返回值是一个 `int` 类型的整数。比较函数的实现需要根据实际的需求来编写,例如:
```c++
int intCompare(const void* a, const void* b)
{
int x = *static_cast<const int*>(a);
int y = *static_cast<const int*>(b);
return x - y;
}
```
这个比较函数用于比较两个 `int` 类型的值。在函数内部,首先将参数 `a` 和 `b` 转换成指向 `const int` 类型的指针,然后获取这两个指针所指向的值,并返回它们的差值。这个比较函数的实现方式可以根据具体的需求来变更。
使用通用指针类型参数实现类属的选择排序函数
好的,我可以为您解答这个问题。首先,通用指针类型参数可以接收不同类型的指针。对于选择排序函数而言,我们可以将其定义为:
```c
void selection_sort(void *base, size_t count, size_t size, int (*cmp)(const void *, const void *));
```
其中,`base`是待排序数组的指针,`count`是数组元素的个数,`size`是每个元素的大小,`cmp`是比较函数指针。比较函数指针的定义可以参考`qsort()`函数的比较函数指针定义。
然后,我们可以在函数内部进行类型转换,将`void *`类型的指针转换为相应的类型指针,以便进行比较和交换操作。下面是函数的实现:
```c
void selection_sort(void *base, size_t count, size_t size, int (*cmp)(const void *, const void *)) {
char *p = (char *) base; // 将 void * 类型的指针转换为 char * 类型的指针
char *temp = (char *) malloc(size); // 用于交换元素的辅助指针
for (size_t i = 0; i < count - 1; ++i) {
size_t min_index = i;
for (size_t j = i + 1; j < count; ++j) {
if (cmp(p + j * size, p + min_index * size) < 0) {
min_index = j;
}
}
if (min_index != i) {
memcpy(temp, p + i * size, size); // 交换元素
memcpy(p + i * size, p + min_index * size, size);
memcpy(p + min_index * size, temp, size);
}
}
free(temp);
}
```
在上述实现中,我们使用`char *`类型的指针进行了类型转换,并在内部进行了比较和交换操作。需要注意的是,在交换元素时,我们使用了`memcpy()`函数进行了元素的复制操作。
希望这个回答能够帮到您!