大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的《郝斌C语言自学教程》,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C语言这个大标签下,确实是郝斌老师的点击量最高,所以说呢,博主的C语言学习笔记都是基于郝斌老师课程上讲的知识结合度娘的总结和一些感悟。
首先,函数的格式是: 返回值类型 函数名(形参1,形参2,.....)
{
函数体(代码 ~ ~)
}
1.函数体就代码嘛,咱用的main()函数,{ 这里码的就是函数体 };
2.函数名就是字面意思,在其他函数中调用时,格式就是:函数名(形参/可能没有);;
3.返回值类型,分为void(空类型,也就是没有返回值)/有返回值类型(int/char/等等)(所以说void类型函数即使在函数体中敲出了返回值,也是没有意义的);返回值就是 return (这里就是返回值);
注意返回值数据类型要与你设定的相同,比如你设定类型为int,而你 return X,那么此函数的返回值就是‘X’对应的 ASCII码 ;
4.形参出现在 函数定义 中,在此函数中可以使用, 离开该函数则不能使用; 实参出现在主函数中,进入其他函数后,实参变量也不能使用 , 形参和实参的功能是作数据传送,子函数被调用时, 主调函数把实参的值拷贝给被调函数的形参;形参变量只有在被调用时才分配内存单元, 在调用结束时, 即刻释放所分配的内存单元(由于编译器的不同,规则可能有点不同);实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参;
注意:
#返回值是赋值给整个函数的,利用printf函数输出时,和整个三目运算符,一大串运算式同理。辅助理解代码:
#include<stdio.h>
int hanshu(int a)
{
return (a/2==5?1:0);
}
int main()
{
printf("%d\n",(10/2==5?1:0));
//将“10除以2,是否等于5,是则返回1,反之返回0”的结果以%d的形式输出
printf("%d\n",hanshu(10));
//实参10将自己拷贝给hanshu(a)中的形参 a,再return 三目运算符的运算结果
}
运行结果:
1
1
--------------------------------
Process exited after 2.511 seconds with return value 2
请按任意键继续. . .
#敲形参代码的作用不只是将实参的数据拷贝给形参,不要忽略这里定义了一个变量来接受实参发送过来的数据,所以这时已经定义了一个变量就不要再在子函数中重复定义此变量名的变量了,辅助理解代码(错误代码):
#include<stdio.h>
void hanshu(int a)//这里已经定义变量 a 了
{
int a;//第二次....奖励报错
printf("%d\n",a);
}
int main()
{
hanshu(10);
}
运行结果:

#函数只要碰到return就会终止
所以此行代码是此函数执行的最后一行代码;
#子函数最好不要printf
在你赋予子函数更多的更多功能的同时,也限定它的一些使用范围,而当你把每个子函数写成更“小”时,在拼接这些函数时,也有了更多的可能性;
#主函数子函数变量不冲突
子函数和主函数的变量完全是隔绝的,就算变量名相同,它们在也在内存中占用着不同的空间
可以分别定义两个相同名的变量,再利用printf函数查看两个变量对应的内存单元地址来理解,如:

#子函数(形参/无)其实就是return的那个东西(理解);
#子函数的功能最好在旁边注释上,可能现在你写不到100行觉得无所谓,但当参与到上万代码的项目时,这就是一个不太好的习惯了;
#主函数可以调用定义函数;定义函数不能调用主函数;定义函数可以调用定义函数(这里需要注意函数声明的问题);如果你使用函数的位置是在你定义函数之前,那就需要 函数声明 了,格式:函数名(形参/无); 函数是否需要声明或声明在哪里这个问题,由于编译器的不同,答案也不同(这个东西真没必要扣,又没用又无聊的一个东西);
大一弟弟一枚,欢迎批评 ~ ~ (~ ̄(OO) ̄)ブ
大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项的更多相关文章
- 大一C语言学习笔记(2)---快捷键篇
大家好,博主呢,是一位刚刚步入大一的软件工程专业的大学生,之所以写博客,是想要与同样刚刚接触程序员一行的朋友们一起讨论,进步,在这里记录我的一些学习笔记及心得,希望通过这些点点滴滴的努力,可以让我们离 ...
- 大一C语言学习笔记(6)---自省篇--流程控制;break,continue,return间的异同;数组应用到循环语句中需要注意的问题;++i 和 i++的异同等。
下面是傻瓜博主"曾经"犯过的错和一些心得: ༼ つ ◕_◕ ༽つ 1.要想流程控制学好,一定要学会化繁为简,举栗子: 三目运算符 (略?略:略)---就是一个数字嘛, ...
- 大一C语言学习笔记(10)---编程篇--制作简易计算器,支持加,减,乘,除,取余运算,要求 0 bug
博主自开学初就一直在努力为自己的未来寻找学习方向,学习编程嘛,尽量还是要抱大腿的,所以我就加入了我们学校的智能设备研究所,别的不说,那的学长们看起来是真的很靠谱,学长们的学习氛围也超级浓厚,所以我就打 ...
- 大一C语言学习笔记(9)---指针篇--从”内存的使用“和“流程控制”的角度来理解“指针变量的使用‘
#深入理解指针变量 举个错误栗子: //以下代码的目的是输出100和1000,但输出结果只有一个100 #include<stdio.h> #include<malloc.h> ...
- 大一C语言学习笔记(8)---指针篇--动态内存是什么?与静态内存有什么区别?怎么使用动态内存,有什么需要注意的地方?
静态内存指的是在编译时系统自动给其分配的内存,运行结束后会自动释放:静态内存是在栈中分配的: 动态内存是我们程序员手动分配的内存,正常情况下,程序运行结束后,也不会自动释放,所以为了避免发生未知的错误 ...
- 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
"指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...
- 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;
考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...
- 大一C语言学习笔记(4)---自省篇
博主"曾经"做过的傻事: #你有的*没打全 #你用/的时候没考虑()是一对的 #printf随后加\n #所有变量只要用,就一定要定义数据类型 #sqrt()代表根号 #inclu ...
- GO1.6语言学习笔记1-基础篇
一.GO语言优势 可直接编译成机器码,Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖 静态类型语言,但是有动态语言的感觉 语言层面支持并发.Goroutine和channel ...
随机推荐
- Java两种基础结构
顺序结构 JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行 顺序结构是最简单的算法结构 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的 ...
- 深入浅出WPF-04.x名称空间详解
x名称空间详解 几个需要特别说明的名称空间: x:Class 用来标记XAML和后台代码之间的合并关系.x:Class根节点的类型必须和x:Class值指向的类型保持一致.x:Class的值指向的类型 ...
- ANTLR学习(一)ANTLR简介和环境搭建
一.ANTLR简介和学习动机 1. ANTLR简介 antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器.ANTLR-Another Tool for Language Reco ...
- 位运算符的用法 ----非(!),与(&),或(|),异或(^)
位运算符的用法 ----非(!),与(&),或(|),异或(^) 三种运算符均针对二进制 非!:是一元运算符.对一个二进制的整数按位取反,输入0则输出1,输入1则输出0. 例: 0100 -( ...
- CSS 奇技淫巧 | 妙用 drop-shadow 实现线条光影效果
本文将介绍一种利用 CSS 滤镜 filter 的 drop-shadow(),实现对 HTML 元素及 SVG 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中.通过本文,你 ...
- JVM学习笔记——栈区
栈区 Stack Area 栈是运行时的单位,堆是存储单位,栈解决程序的运行问题,即程序如何执行,如何处理数据. 每个线程在创建时都创建一个该线程私有的虚拟机栈,每个栈里有许多栈帧,一个栈帧对应一个 ...
- 面试官:Java从编译到执行,发生了什么?
面试官:今天从基础先问起吧,你是怎么理解Java是一门「跨平台」的语言,也就是「一次编译,到处运行的」? 候选者:很好理解啊,因为我们有JVM. 候选者:Java源代码会被编译为class文件,cla ...
- python实现地理编码
python实现地理编码 去高德地图申请好key python代码 # -*- coding:utf_8 -*- # !/usr/bin/python37 """ @au ...
- 编程题:X星人的金币
X星人的金币 时问限制:3000MS 内存限制:589824KB 题目描述: X是人在一艘海底沉船上发现了很多很多很多金币.可爱的X星人决定用这些金币来玩一个填格子的游戏.其规则如下:第1个格子放2枚 ...
- 【数据结构与算法Python版学习笔记】递归(Recursion)——优化问题与策略
分治策略:解决问题的典型策略,分而治之 将问题分为若干更小规模的部分 通过解决每一个小规模部分问题,并将结果汇总得到原问题的解 递归算法与分治策略 递归三定律 体现了分支策略 应用相当广泛 排序 查找 ...