博主学习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) ̄)ブ