| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:一个C例子
只看楼主 加入收藏
yywyai
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2004-12-9
收藏
 问题点数:0 回复次数:7 
一个C例子
void get(int x)
{
  printf("%d",x);
}
void k(void(* vt)(int e))
{
   vt(7);
}
main()
{
 k(get);
 getch();
}
搜索更多相关主题的帖子: 例子 get void int main 
2005-02-23 11:00
QQ258338468
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-2-23
收藏
得分:0 
想说明什么问题呢?
2005-02-23 20:56
QQ258338468
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-2-23
收藏
得分:0 
我认为这更应该是C++的一个小例子
2005-02-23 21:01
QQ258338468
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-2-23
收藏
得分:0 
更改了一点,是不是你想说明的问题?
#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();
}
}
2005-02-23 21:09
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
楼上的,你这样一改就失去了它原先含义了.

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-02-23 21:17
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

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

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编辑过]


淘宝杜琨
2005-02-23 21:59
amzyb
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2005-1-10
收藏
得分:0 
循循善诱!

看后入梦初醒
2005-02-24 16:46
北北
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-2-24
收藏
得分:0 
恩~~~~问题我看已经说明白了吧
2005-02-24 21:47
快速回复:一个C例子
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017142 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved