memory指的是内存。 size_t就是unsigned int. 而sizeof的返回类型就是size_t ,是为sizeof量身定制的类型. memset函数的作用是填充内存块.,
memset(void *dest , int c , size_t count); 意思是对dest为起始地址,填充字符c,一共填充count个数字. ①设置内存的时候是以字节为单位的,②每个字节内容都是相同的.
自定义函数 函数都有输入参数,返回类型,返回值,函数名,函数参数,函数体 当主函数的a和b(实参)传给自定义函数里的x和y(形参)时,x和y的地址和a与b的地址不相同,x与y的值不管怎么改变而不返回数值时a和b不会改变。当实参传给形参的时候,形参时实参的一份临时拷贝,对形参的修改不会影响实参。可以用指针完成形参对实参的操作控制。
实参 可以是常量,变量,表达式,函数等等。
形式参数是函指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(被分配到内存单元),所以叫形式参数。形式参数在函数调用完成之后会自动销毁。因此形式参数旨在函数中有效。
传值调用 对形参的改变不会影响实参
传址调用 对形参的改变会改变实参,实参通过地址和形参相互影响
在循环中直接使用return 0;直接跳到整个函数结尾。
TDD 测试驱动开发test driven development,一个技能多看。
数组在传参的时候传递的不是整个数组,传递的是数组首元素的地址。
函数的嵌套调用和链式访问:函数和函数之间可以根据需求进行组合相互调用。函数不能嵌套定义
int main()
{
void test()
{
}
} //嵌套定义是错误的.
链式访问 把一个函数的返回值给另一个函数
函数的声明和定义 .c文件通过编译和 链接两个过程变成.exe文件. 编译的过程是扫描,从上到下从左到右的. 在函数使用前至少应该声明一次,定义可以留在主函数后面.
int Add( int , int );
int main()
{
return 0;
}
int Add(int x, int y)
{
return x+y;
}
函数的声明是告诉编译器有一个函数叫什么,参数是什么,返回类型是什么,具体内容不归函数声明管.函数声明会在函数使用之前,要满足先声明后使用,函数声明一般放在头文件中.
函数定义放在大括号中,具体描述函数的功能.
在企业编程中,我们把声明放在一个头文件.h中 ,把一个函数的实现放在.c文件中
例如我们要编写一个Add加法模块,把Add函数的声明放在一个Add.h文件中,把Add函数的定义放在
Add.c中,这两个文件合起来叫一个加法模块. 在想要使用Add函数的时候我们只需要在头文件写#include "add.h"这个头文件即可.
这样企业分工实现一个编程的时候可以一起引用同一个函数还不需要在一个文件中一起编程.
把一个函数分成头文件和本身两种可以让别人引用函数的同时不把函数的算法暴露给别人. 如果不愿意暴露算法代码就可以编译成静态库.lib文件 把Add.h和Add.lib文件给其他人.
先包含头文件#include "Add.h"; 导入静态库: #pragma comment(lib,"Add.lib");就可以用Add这个加法模块.
函数的递归 程序调用自身的编程技巧成为递归可以把复杂的大型问题层层变成较小的相似的问题.只用少量程序就可以写出解题过程中的多次重复计算.