用指向函数的指针作函数参数

函数指针变量通常的用途之一,是把指针作为参数传递到其他函数。

调用函数指针的例子:

int locateElem(LinearList *pL, ElemType e, int (*compare)(ElemType*, ElemType*))

其中 compare 是函数指针名,(ElemType*, ElemType*)是函数指针的参数。

调用函数指针的例子:

if ((*compare)(&e1, &e2) == 0)
    return i;

参数 &e1 和 &e2 是两个类型为 ElemType* 的变量。

二,举例应用

在ACM比赛中常使用 stdlib.h 中自带的 qsort 函数,其中就有教科书式的函数指针应用示范。

#include <stdio.h>
#include <stdlib.h>

int comp(const void*a, const void*b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    int n = 5;
    int *array = (int*)malloc(n*sizeof(int));
    int i = 0;
    for (; i<n; i++)
    {
        *(array + i) = 10 - i;
    }
    qsort(array, n, sizeof(int), comp);
    for (i = 0; i<n; i++)
    {
        printf("%d\t", array[i]);
    }
    return 0;
}
时间: 2024-10-15 18:59:55

用指向函数的指针作函数参数的相关文章

[C++程序设计]用指向数组的指针作函数参数

1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 void output(int (*p)[4]); 7 int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; 8 output(a); 9 return 0; 10 } 11 12 void output(int (*p)[4]) 13 { 14 int i,j; 15 for(i = 0; i < 3; i ++) 1

指向结构体变量的指针作函数参数

 /********************* * 指向结构体变量的指针作函数参数 * ***********************/ #include<stdio.h> #include<string.h> struct student {  int num;  char name[20];  //char *name;    //若定义为指针则应与下面 stu.name = "jacob"; 配对使用,交叉使用则会报错                 //

切勿使用:指向局部变量的指针作为函数的返回指针!

今天码代码的时候,出现了一个诡异的问题: 首先:函数 pkt_analyzer 返回了一个 PktUnit类型的指针.我先把端点跑到puu赋值后的下一句,查看puu里面的内容,发现是正确的: payload_len = 7,pkt_len = 35 接着我再向下跑一步,发现puu内容就不对了: payload_len = 1514280713 ;pkt_len = 17 整个就不对了-- 找了一个多小时,没发现问题出在哪儿!后来突然想到,可能是函数返回的时候出的问题,不能光看函数的立即返回结果!

对于在函数把指针做为参数传入的几点总结

一.形如void Func(char* ptr). 注意这里传进去的是指针的副本,本质上是传值的方式.在函数内部新建一个指针变量,再把ptr指向的值赋给局部指针变量.对局部变量本身地址的任何修改都不会影响到ptr. 1 int newInt=1; 2 3 void ChangeLoc(int* ptr) 4 { 5 ptr=&newInt; 6 } 7 8 int main() 9 { 10 int num=2; 11 int* ptr=&num; 12 cout<<ptr&l

C++中用指向二维数组的指针作函数参数

举例说明: 函数声明:void Fun(int (*p)[4] ); void Fun(int (*p)[4] ) {  int i=0,j=0;  for(i=0;i<4;i++)   for(j=0;j<4;j++)      cout << *(*(p+i)+j) << endl;    } p是指向a[0]的指针,那么p+i就是指向a[i]的指针,*(p+i)就是指向a[i][0]的指针, 那么*(p+i)+j就是指向a[i][j]的指针,所以*(*(p+i)+

不理解为什么调用一级指针作函数参数时候,就不能把myp1 = NULL,

产生野指针原因的本质:指针变量和它所指内存空间变量是两个不同的概念. 解决办法:三步曲 1.定义指针时,把指针变量赋值成NULL 2.释放内存时,先判断指针变量是否为NULL 3.释放完内存后,把指针变量重新复制成NUL #define  _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h> //你上面分配内存,总得给释放掉 二级指针法 int  getMem_f

结构体指针作函数参数(C# 调用C++ 的DLL)

1.C++结构体定义: #pragma pack(1) struct Person {     #define Count_favoriteNumbers 6      int id;      float favoriteNumbers[Count_favoriteNumbers]; }; #pragma pack()        // #pragma pack(1) end C++ 导出函数: #define DllExport extern "C" __declspec(dll

指向数组的指针做函数参数练习----打印不及格学生成绩

输出不及格学生的序号以及他们的所有成绩. #include <stdio.h> int main(){ void search(float (* p)[4]); //数组表示3名学生的4门课的成绩,本程序要找到有不及格课程 //的学生序号,并打印出来他们的所有成绩 float score[3][4]={{5,67,89,78}, {34,78,90,78}, {89,87,98,90}}; search(score); } void search(float (* p)[4]){ for(in

C语言数组指针(指向数组的指针)

注意:数组指针的定义,与指针数组的区别 转载:http://c.biancheng.net/cpp/biancheng/view/162.html 指向多维数组元素的指针变量 ① 指向数组元素的指针变量[例6.7]输出二维数组各元素的值.这里采用的方法是用基类型为整型的指针变量先后指向各元素,逐个输出它们的值. #include <iostream> using namespace std; int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19