动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.打印日历.
.技巧:在C/C++中如何构造通用的对.
.C++之父Bjarne谈C++的未来发展.
.c++中布尔类型的入门教程.
.C语言初学者入门讲座 第九讲 数组.
.文本模式下的GUI设计,使用tc2.0.
.用V C++检测和隔离内存泄漏.
.C++ Builder中应用GDI实现虚拟台.
.BCB6与BCB2006控件的安装.
.数据结构学习C++——二叉树.
.VC通用控件编程之CImageList控件.
.C++ Builder 使用动作.
.一个简单易懂的时钟程序.
.C++ 对象的初始化.
.C++ Builder 在对象观.
.C++将DBGrid中数据导出到Word和E.
.控制台窗口界面的编程控制(二).
.Windows Sockets:使用 CAsyncSo.
.C++ 中重载 + 操.
.点阵的汉字程序.

C语言函数中利用指针引用可变参数的方法

发表日期:2008-3-8 |


 
在C语言的程序设计中,用户程序的功能快都是一些函数,而函数在定义时,可选用省略号来表示参数类型和个数的不确定性。如function(F1,…)的函数的第一个参数F1表示为某种类型的变量,而后的其它参数无论是类型还是参数个数都不确定。在c函数体内,对用省略号说明的参数不能直接用参数名来引用,但可用参数的地址引用,如何取得省略参数的地址是引用省略号参数的要害。 在c函数调用时,参数或参数的指针都被压入堆栈,并且最后一个参数最先进入堆栈,第一个参数最后进入堆栈。假如小系统模式编译,变量的指针为2字节,假如用大系统模式编译,变量的指针为4字节,假如我们求得第一个参数指针在堆栈内的地址,加上变量指针的字节数,再取相应内存的内容,即求出其它各参数指针在堆栈内的地址,从而可引用用省略号说明的参数。 以下用小型模式举例引用可变参数的格式输入函数: inputpict(char *format,…)
{
   char ff,str[256];
   void *p; /*此无类型指针可指向任意类型的变量p */
   p=*(&format+1);
   getspict(*format); /*按各式输入字符串*/
   ff-toupper(*format); /*取须返回变量类型*/
   switch(ff)
   {
      case 'I':{
         int *a;
         a=p;
         *a=atoi(str);
         break; /*返回整型变量处理*/
      }
      case 'L':{
         long *a;
         a=p;
         *a=atol(str);
         break; /*返回长整型变量处理*/
      }
     case 'F':{
         float *a;
         a=p;
         *a=(float)atof(str);
         break; /*返回浮点数处理*/
      }
      case 'D':{
         double *a;
         a=p;
         *a=atof(str);
         break; /*返回双精度浮点数处理*/
      }
      case 'C':{
         char *a;
         a=p;
         strcpy(a,str);
         break; /*返回字符串处理*/
      }
      default:
         error("Error!"); /*用户自定义出错时的信息*/
      }
   return;
} 对函数的几点说明: 该函数是一个格式输入函数,format为格式串"Fn.n",F为:'I'整数;'L'长整数…两个n分别表示小数点前和后的位数。二省略号说明部分是一个变量的地址,即指针类型变量,其中getcspict()函数位按格式输入串。
注重:p=*(format+1);这一语句的无类型指针p取的是format的地址加1的内容,这与前面的说明堆栈内指针地址应加2不一致,原因是该指针在编译是乘上了指针放大因子2。经多个版本的c编译程序编译都证实在此处加1的结果才是正确的。

 

上一篇:More effective C++:审慎使用异常规格 人气:307
下一篇:Install Shield的使用介绍 人气:974
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号