mysql不定参数函数_可变参数函数(一)

本文介绍了如何在C语言中实现类似printf()和scanf()的可变参数函数,通过`va_list`、`va_start()`、`va_arg()`和`va_end()`宏来处理不定数量的参数。通过示例展示了如何创建一个简单的`simple`函数和一个计算求和的`add`函数,并解释了这些宏的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个函数可以接受不定数的参数个数,这就是可变参数函数,比较常见的比如printf(),scanf();

printf(const char*format,…);

printf(“%d”,i);

printf(“%s”,s);

printf(“the numberis %d,stirng is :%s”,i,s);

变量参数函数的简单实现:

#include#include

int simple(intnum,...)

{int i,result = 0;

va_list vl;

va_start(vl,num);

printf("num:%d, vl:%d\n",num,*vl);for(i = 0; i < num - 1 ; i++)

{

result= va_arg(vl,int);

printf("in for result:%d ,*vl:%d\n",result,*vl);

}

va_end(vl);returnresult;

}intmain()

{int sum = simple(5,1,2,3,4,5);if(0 ==sum)

{

printf("simple failed\n");

}else{

printf("simple success! sum = %d\n",sum);

}return 0;

}

结果如下:

exbot@ubuntu:~/wangq

MySQL 中,可以使用 `CASE` 表达式来模拟 Oracle 的 `DECODE` 函数的功能。Oracle 的 `DECODE` 函数可以根据输入值匹配不同的条件,并返回相应的结果。MySQL 并没有直接提供类似 `DECODE` 的函数,但我们可以通过构造动态 SQL 或者编写自定义存储过程/函数的方式来实现。 下面是个简单的例子,展示如何通过 MySQL 的 `CASE` 表达式实现类似功能: ### 示例代码 ```sql DELIMITER $$ CREATE FUNCTION DECODE_MY ( expr VARCHAR(255), -- 输入表达式的值 val1 VARCHAR(255), res1 VARCHAR(255), val2 VARCHAR(255), res2 VARCHAR(255), default_res VARCHAR(255) -- 默认返回值 ) RETURNS VARCHAR(255) DETERMINISTIC BEGIN DECLARE result VARCHAR(255); SET result = CASE WHEN expr = val1 THEN res1 WHEN expr = val2 THEN res2 ELSE default_res END; RETURN result; END$$ DELIMITER ; ``` #### 使用示例 假设我们想对某个字段的值做判断并返回对应的结果: ```sql SELECT DECODE_MY('B', 'A', 'Result A', 'B', 'Result B', 'Default Result') AS decode_result; -- 返回 "Result B" ``` --- 如果需要支持更多的输入参数组合,可以在创建函数时增加对应的参数对(即每个 `valX` 和 `resX`),然后依次添加到 `CASE` 条件中即可。 --- ### 具体解释: 1. **`expr`** 是传入的目标变量; 2. **`val1`, `val2` 等** 是目标变量可能取的不同值; 3. **`res1`, `res2` 等** 是当满足上述条件时应该返回的内容; 4. 如果都不满足,则返回默认值 **`default_res`**; 这种设计可以让我们的逻辑更加清晰,同时也避免了硬编码复杂的嵌套结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值