当前位置: 代码迷 >> C语言 >> 一个C例子
  详细解决方案

一个C例子

热度:44   发布时间:2005-02-23 11:00:00.0
一个C例子
void get(int x)
{
  printf("%d",x);
}
void k(void(* vt)(int e))
{
   vt(7);
}
main()
{
k(get);
getch();
}
搜索更多相关的解决方案: 例子  get  void  int  main  

----------------解决方案--------------------------------------------------------
想说明什么问题呢?

----------------解决方案--------------------------------------------------------
我认为这更应该是C++的一个小例子
----------------解决方案--------------------------------------------------------
更改了一点,是不是你想说明的问题?
#include "stdio.h"
#include "stdlib.h"
void get(int x)
{
  printf("%d",x);
}
void k(void get(int e))
{
   get(7);
}
main()
{
int i=0;
clrscr();
for(i=0;i<10;i++)
{
k(get);
printf("%d\n",random(10));
getch();
}
}
----------------解决方案--------------------------------------------------------
楼上的,你这样一改就失去了它原先含义了.
----------------解决方案--------------------------------------------------------

这是一个“函数指针作为函数形参”的问题

void get(int x){ printf("%d",x); }

void k(void(* vt)(int e)){ vt(7); }

main() { k(get); getch(); }

首先我们先把它想象成一个美女,让我们来一件件的把她的衣服剥开~肉麻 *_*

(1)首先看void k(void(* vt)(int e)){...} 这个函数定义你怎么看都不爽。的确,这样的形态我们比较少见。但是我见过更加变态的(*void(*)()0)();这样的东西足以让任何一个C程序员胆寒。

好了,少说废话。 函数k的参数是void(* vt)(int e) 这个是什么东西呢?其实这个就是: “定义了一个函数指针vt,这个函数指针所指向的函数必须要有一个整形行参~!”

好,现在我们能理解void k(void(* vt)(int e))到底是什么东西了 他的意思就是: “定义一个函数k,k的参数是一个指向有一个‘整形行参’的函数的指针vt” 没理解?继续理解,然后你才能继续往下看。

(2)然后到vt(7);这个就很好理解啦。他就是调用vt所指向的那个函数。

(3)最后,我们来理解一下k(get);我们在前面已经说过了vt是“一个指向有一个整形行参的函数的指针”。那么vt到底要指向那个函数呢?对,它指向了get函数。为什么?因为k(get);,而且get函数满足vt指针所要求的条件:有一个整形行参的函数。

所以,到最后我们可以这样片面的理解这个程序: k(get);调用了函数k; 函数k定义了函数指针vt作为k的形参,然后再令这个指针vt指向函数get(); 并且vt(100);调用了函数get(),并且把100作为get()的参数传递给了get();

[此贴子已经被作者于2005-2-23 22:04:06编辑过]


----------------解决方案--------------------------------------------------------
循循善诱!

看后入梦初醒
----------------解决方案--------------------------------------------------------
恩~~~~问题我看已经说明白了吧
----------------解决方案--------------------------------------------------------
  相关解决方案