【C语言笔记】【有点逗系列】 使用printf实现的加法
有点逗系列内容。用于记录各式各样有点逗甚至没有什么用的C语言用法☺。
功能说明
用于计算两个整数相加之和,例如1和2相加等于3。
该代码是在该网站看到的:Some unknown features or tricks in C language。
实现代码
int add(int x, int y)
{
if(x != 0 && y != 0)
return printf("%*c%*c", x, '0', y, '0');
else
return x != 0 ? x : y;
}
参数x和y是用于相加的数,返回值是相加之和。
示例程序
int main(int argc, char* argv[])
{
int x = 0, y = 0;
x = 666;
y = 23;
printf("\n%d + %d = %d\n", x, y, add(x, y));
x = 15;
y = 85;
printf("\n%d + %d = %d\n", x, y, add(x, y));
return 0;
}
实现原理
核心代码就是这一句:
printf("%*c%*c", x, '0', y, '0');
首先介绍下printf
中的两个知识点:
-
*
的作用*
用于标示宽度,宽度不是在格式字符串中指定的,而是作为必须格式化的参数前面的一个附加整数值参数。例如:printf("%*c", 4, 'a');
表示字符a的宽度为4,会在a前面填充3个空格,使其宽度为4。
等效于:
printf("%4c", 'a');
-
printf
的返回值可能有很多人不知道printf还有返回值,printf函数在成功调用后,会返回写入的字符总数。
在上述的核心代码中,传入的参数x
就是第一个字符0的宽度,传入的参数y
就是第二个字符0的宽度,所以返回值就是宽度x
加上宽度y
的总和,从而实现了加法功能。核心代码中的字符0可以换成其他任意字符,例如1
,a
什么的都可以。
[参考资料]
Some unknown features or tricks in C language
本文链接:https://blog.csdn.net/u012028275/article/details/120112918