C-返回值为函数指针的函数
发表于
|总字数:91|阅读时长:1分钟
返回值为函数指针的函数
本质上是一个函数,返回值为函数指针
1 | #include<stdio.h> |
运行结果如下:

那能否实现一直调用下去呢?
求大佬写一个能运行 drink()()()()()()()()()()() 的代码
文章作者: 寰宇体
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 寰宇体的世界!
相关推荐
2023-11-25
抽象代码:看不见的循环体
先上完整代码。这是原版原样,一个字都没改——它编译零警告,运行也正常退出。你能看出它输出了什么吗? 坑人的c语言.c123456789#include <stdio.h>int main(){ int i = 0; for(i = 0; i < 114514; ++i) ...
2022-09-12
四舍五入:浮点数当着我的面撒谎
📌 更新(2026-09-01):归档这篇 2022 年的旧作业,顺手用 GCC 15.1.0 复测——结果一组测试数据当场翻车,挖出了下文的浮点罗生门现场。 我手里最老的存货之一:头上顶着”英文教材 P12 作业 1.3”的注释,从判题平台的 Begin/End 填空标记看,这是一道在线作业题——不用 printf 的格式化功能,自己把一个 double 逐位打印出来,还要处理四舍五入。 主框架是教材 P10 的递归打印函数 PrintOut——高位递归完了才打印当前位,个位数作递归出口,这是”递归打印整数”的经典范本。要填的空有三处:RoundUp 里凑出四舍五入的加数,DecPart 里取小数部分,PrintFractionPart 里为下一位循环做准备。填法本身不难,核心的 RoundUp 长这样: 123456789double RoundUp( double N, int DecPlaces ) // 画龙点睛部分:四舍五入处理{ int i; double AmountToAdd = 0.5; for(i = 0;i < De...
2024-01-09
抽象代码:一个"O(1)"的质数判断器
先看运行效果。一个判断质数的程序,输入 7: 1237 → 7 is a Prime100 → 100 isn't a Prime254 → 254 isn't a Prime 响应快得惊人,因为它一次除法都没做——不是算法好,是它根本不判断。它是一份”背好答案”的程序:把 1 到 255 每个数是不是质数,直接写成 1029 行 if-else。而这个程序的作者,是另一个程序。 生成器一号:把判断展开成 if-else生成器的思路是时间换空间再换时间:生成的时候用普通试除法判断一次质数,然后把结果硬编码进一个新程序: 123456789101112131415161718for (int i = 2; i < num; i++){ char temp[50]; sprintf(temp, " else if(num == %d)\n", i); fprintf(fp, temp); fprintf(fp, " {\n"); if(isPrime(i)...
2024-05-01
Print.h 开发记(五)V1.5:覆盖基础类型
羡慕 Python 的 print() 吗?这个系列记录我用纯 C 实现一个万能 print 库的全过程——项目已开源: GitHub:https://github.com/COSMICAL-CONTAINER/C_Program-Print.h V1.5 是一次”夯实基础”的版本,没有新花样,主要做了三件事:补全基础类型与指针类型的打印、规范缓冲区与命名、完善注释。库从这个版本开始有了”正式出品”的样子。 基础类型覆盖:分发表补全_Generic 分发表补上了缺的三种基础类型——unsigned char、unsigned int、long long,各自对应一个新的打印函数: 1234567891011121314void print_uchar(unsigned char num){ printf("%c", num);}void print_uint(unsigned int num){ printf("%u", num);}void print_longlong(long l...
2024-01-13
抽象代码:会自杀的代码
函数能不能在干完活之后,把自己从程序里”抹掉”?对象能不能在出生的那一刻自我了断?能。今天这篇讲两个短小精悍的自杀程序——一个 C 的,一个 C++ 的。 📌 更新(2026-08-31):为写这篇重新编译复现了两个程序,并修正了对自杀对象输出的描述——它比想象中死得更干脆,详见运行一节。 自杀函数指针:信使送信的比喻先看代码: 自杀函数指针.c12345678910111213141516171819202122// 一个简单(但可能不那么让人愉快)的比方是,信使P把一封信从A送到B,// 而信的内容的第一句就是"干掉P,然后再看下面的内容"。#include <stdio.h>void init(void);void (*__init__)(void) = init;void init(void){ printf("init programm\n"); __init__ = NULL;}int main(){ __init__(); // __init__(); ...

2023-09-11
抽象代码:分号的艺术
C 语言里,分号是语句的句号。规则人人都懂:句子写完,分号收尾。 但分号其实是”语句终止符”,它并没有规定自己必须站在句尾。于是有了下面这个程序——每个分号都搬家搬到了下一行的行首: 用分号作为缩进.c123456789101112#include <stdio.h>int main(int argc, char* arg[]){;;;;int i = 0;;;;while(i < 10){;;;;;;;;printf("%d\n", i);;;;;;;;i++;;;;};;;;return 0;} 第一眼:int i = 0 后面没有分号,这能编译?——能。真机运行,输出干干净净的 0 到 9: 12345012...9 原理:把分号从句尾搬到句首关键在于理解分号到底”属于谁”。C 编译器眼里,换行就是普通的空白,int i = 0 下一行行首的那四个分号,其中第一个分号恰好补上了上一句缺的句号,剩下三个分号是三条合法的空语句(empty statement,什么都不做)。 也就是说,编译器看到的...
评论
GiscusTwikoo
公告
欢迎来到寰宇体的世界 ✨