ptr 是指向函数的指针变量,所以可把函数 max()赋给 ptr 作为 ptr 的值,即把 max()的入口 地址赋给 ptr,以后就可以用 ptr 来调用该函数,实际上 ptr 和 max 都指向同一个入口地址,不 同就是 ptr 是一个指针变量,不像函数名称那样是死的,它可以指向任何函数 。在程序中把哪 个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函 数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。 指针函数应用举例:建立链表,插入,删除接点 #include using namespace std; #define NULL 0 struct student {long num; float score; student *next; }; int n; int main() { student *creat(void); student *del(student *,long); student *insert(student *,student *); void print(student *); student *head,*stu; long del_num; cout<<"input records:"<>del_num; //输入要删除的学号 while(del_num!=0) {head=del(head,del_num); //删除后链表的头地址 print(head); //输出全部结点 cout<<"input the deleted number:"; cin>>del_num; } cout<>stu->num>>stu->score; while(stu->num!=0) {head=insert(head,stu); //返回地址 print(head); //输出全部结点 cout<>stu->num>>stu->score; } return 0; 2 } student *creat(void) //建立链表的函数 {student *head; student *p1,*p2; n=0; p1=p2=new student; //开辟一个新单元,并使 p1,p2 指向它 cin>>p1->num>>p1->score; head=NULL; while(p1->num!=0) {n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=new student; cin>>p1->num>>p1->score; } p2->next=NULL; return(head); } student *del(student *head,long num) //删除结点的函数 {student *p1,*p2; if (head==NULL) //是空表 {cout<<"list null!"<num && p1->next!=NULL) //p1 指向的不是所要找的结点且后面还有结点 {p2=p1; p1=p1->next;} //p1 后移一个结点 if(num==p1->num) //找到了 {if(p1==head) head=p1->next; //若 p1 指向的是首结点,把第二个结点地址赋予 head else p2->next=p1->next; //否则将下一结点地址赋给前一结点地址 cout<<"delete:"<next=NULL;} //使 p0 指向的结点作为头结点 else {while((p0->num>p1->num) && (p1->next!=NULL)) {p2=p1; //使 p2 指向刚才 p1 指向的结点 p1=p1->next;} //p1 后移一个结点 if(p0->num<=p1->num) {if(head==p1) head=p0; //插到原来第一个结点之前 else p2->next=p0; //插到 p2 指向的结点之后 p0->next=p1;} else 3 {p1->next=p0; p0->next=NULL;}} n=n+1; return (head); } //插到最后的结点之后 //结点数加1 void print(student *head) //输出链表的函数 {student *p; cout<<"Now,These "<num<<" "<score<next; }while(p!=NULL); } int *p[n] 与 int(*p)[n]