能力缺口:你写的函数是不是只在脑子里跑得通
很多转岗或自学C语言的人,语法背得很熟,但一到写函数就出事:传进去的参数改了外面却没变,返回的指针一拿出来就变成乱码,递归写到一半直接把程序崩了。这门课只讲一个主题,就是函数的底层机制。它不教你怎么写hello world,而是解决你对函数调用过程、参数传递、返回值生命周期这些底层逻辑的认知盲区。如果你写代码总是靠猜,猜传进去的值会不会变,猜return回来的内存还在不在,那这就是你要补的课。这门课适合已经掌握基础语法、能写简单顺序结构代码,但对函数调用机制完全没概念的学习者。
建议先看的几块与配套练习
资料里的内容是按底层逻辑排的,不要从头顺着看。建议先看函数调用过程与基本概念这块,建立栈帧的初步概念,知道函数调用时内存里发生了什么。接着直接看void与参数副本机制,这是很多人卡住的地方,搞懂形参和实参的副本关系,你就明白为什么传值改不了外面的变量。然后看return副本机制以及类型转换,彻底弄清返回值是怎么拷贝出来的。看完这几块,一定要配合动手写代码验证。练习方法很简单:写一个函数,在里面修改传入的参数,在主函数里打印修改前后的值;再写一个返回局部变量地址的函数,去接收并打印,看看什么时候崩。用这种刻意制造报错的方式去验证课程里讲的机制,比光看视频管用得多。
学完能独立做什么
学完这门课,你应该能独立设计出正确的函数接口,清楚知道每个参数该传值还是传指针,明白返回值该返回什么类型才安全。遇到程序崩溃,你能通过函数调用关系排查是不是栈溢出或者野指针问题。最后几节关于递归处理和栈溢出的内容,能让你彻底理解递归的执行过程,知道线性递归和树状递归的区别,不会再盲目写递归导致程序挂掉。看完这门课,你应该能不犹豫地回答这几个问题:为什么传数组给函数时要用指针?return一个局部变量的值安全吗?递归调用太深会发生什么?函数声明和定义到底有什么区别?如果这些你都能说清楚,这门课就算补到位了。
课程目录
1 01.补充简单函数上 (43:50) 2 02.补充简单函数下 (01:15:29) 3 03.函数意义以及CCPP编译器调用的差别 (24:20) 4 04.函数调用以及函数基本概念 (40:49) 5 05.void与参数副本机制 (17:04) 6 06.return副本机制以及类型转换 (43:37) 7 07.函数执行过程 (18:41) 8 08.函数参数运算顺序 (08:36) 9 09.可变参数的实现 (22:29) 10 10.函数声明与定义和全局变量声明与定义 (27:00) 11 11.函数定义与声明差别 (04:25) 12 12.递归处理简介栈溢出让其他程序栈溢出 (24:01) 13 13.线性递归 (18:05) 14 14.树状递归 (17:24) 15 15.(补充)函数返回值声明周期 (12:11)





