围棋少年方百花图片:一步一步写算法(之 可变参数)
来源:百度文库 编辑:中财网 时间:2024/04/29 19:10:34
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
可变参数是C语言编程的一个特色。在我们一般编程中,函数的参数个数都是确定的,事先定下来的。然而就有那么一部分函数,它的个数是不确定的,长度也不一定,这中间有什么秘密吗?
其实,我们可以回忆一下哪些函数是可变参数的函数?其实也就是sprintf、printf这样的函数而已。那么这些函数有什么规律吗?关键就是在这个字符串上面。我们可以举一个例子看看,
view plaincopy to clipboardprint?
- void test()
- {
- printf("%s, value = %d\n", "hello", 10);
- }
test函数里面也就是一个简单的打印函数。那么这个函数有什么特别的地方呢,那就是%s、%d和后面的字符是一一对应的,所以有多少个这样的字符,首参数后面就会剩下多少个参数。那么后面参数的地址怎么获取呢?我们可以回想一下,堆栈一般是怎么压栈处理的,
view plaincopy to clipboardprint?
- /*
- * stack space:
- *
- * 参数3 | up
- * 参数2 |
- * 参数1 v down
- */
view plaincopy to clipboardprint?
- void PrintInt(char* buffer, int data, ...)
- {
- return;
- }
view plaincopy to clipboardprint?
- void PrintInt(char* buffer, int data, ...)
- {
- static char space[1024];
- char temp[32];
- int* start;
- int count;
- if(NULL == buffer)
- return;
- memset(space, 0, 1024);
- memset(temp, 0, 32);
- start = (int*) &buffer;
- count = 0;
- while(buffer[count]){
- if(!strncmp(&buffer[count], "%d", strlen("%d"))){
- start ++;
- itoa(*start, temp, 10);
- strcat(space, temp);
- count += 2;
- continue;
- }
- space[strlen(space)] = buffer[count];
- count ++;
- }
- memset(buffer, 0, strlen(buffer));
- memmove(buffer, space, strlen(space));
- return;
- }
view plaincopy to clipboardprint?
- void display()
- {
- char buffer[32] = {"%d %d %d %d\n"};
- PrintInt(buffer, 1, 2, 3, 4);
- printf(buffer);
- }
哪位高手,能给我写个可变分区分配与回收的最坏算法啊!小弟感激不尽啊!
怎样才能把算法写好啊?
写者问题的算法
如何一步一步的提高写公文材料的水平?
比较两个控制算法好坏,主要是比较哪些参数?
密码算法中的椭圆曲线和参数是什么意思啊?
第二个参数怎么写?
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
程序调度(时间片轮转算法)用C语言程序怎么写啊??谢谢
用C语言写一个排序算法。
帮忙 写个算法 用C++语言
MP3的VBR(可变比特率)有什么用?
可变比特流
瓶装的营养快线的百分百中奖,怎么得奖,一步一步写清THS
qq空间开场的FLASH代码什么,谁能一步一步慢慢写清楚 谢 了
第二个参数应该怎么写
ping命令都有那写参数?
pcap_compile的过滤参数怎么写?
C#写SQL参数存储过程错误
设计一个用链表表示的简单选择排序的算法,并实现之(试验报告)
我家没迅雷怎么下载(一步一步说清楚哦)
山市是怎么一步一步变化的(用原句回答)
根号9等于多少?(一步一步的演算出来,谢谢!)