c语言函数指针数组的简单实例
2013-10-20 22:06
302 查看
#include <stdio.h> #include <stdlib.h> #include <time.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") //显示系统当前时间 void f1(){ time_t lt; lt = time(NULL); printf("当前系统时间为:%s\n", ctime(& lt)); //打印出系统时间 } //显示本机IP void f2(){ WSADATA wsaData; char name[255];//定义用于存放获得的主机名的变量 char *ip;//定义IP地址变量 PHOSTENT hostinfo; //调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库 if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) { //现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续 if( gethostname ( name, sizeof(name)) == 0) { //如果成功地将本地主机名存放入由name参数指定的缓冲区中 if((hostinfo = gethostbyname(name)) != NULL) { //这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo //为PHOSTENT型的变量,下面即将用到这个结构体 ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); //调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP //打印IP地址(如192.168.0.1) printf("本机IP地址为:%s\n",ip);//输出IP地址 } } WSACleanup( );//卸载Winsock库,并释放所有资源 } } //退出程序 void f3(){ exit(0); } int main () { int choice; void (*foo[3])()={f1,f2,f3};//声明函数指针数组 do{ printf("-----请选择一项操作------\n"); printf("0.显示时间\n"); printf("1.显示IP地址\n"); printf("2.EXIT\n"); scanf("%d",&choice); //此处可以直接用函数指针数组解决,来代替switch-case语句,使程序更加简洁,这种在有很多switch-case选项时优点更加明显 foo[choice](); } while(choice==0||choice==1); return 0; }
相关文章推荐
- C++读入两个参数
- C++为什么用引用
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C++ error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“discards qualifiers”
- 虚析构函数的作用
- C++ opencv小试4
- CPP_Primer CH6--抽象容器
- 如何用C语言获取系统的sid信息?
- C++ 学习 小细节 01数组指针篇
- C 语言中实现数据与方法的封装
- C++ 线程安全的单例模式
- 图的dfs与bfs(深搜广搜)c++实现
- DirectShow的"PVOID64错误"
- xcode5-SDK7解决错误:invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)
- C++自增操作与原子性
- 初学c++
- C/C++ 程序执行时间
- 包含路径(include path) 库路径(lib path)VC++2010 (附加)包含目录 (附加)库目录
- C++设计新思维的traits和policy