诡巫,青竹剑鞘,陆妍淇
函数
printf 输出的函数
scanf 输入的函数
函数是什么 怎么写
是一组一起执行一个任务的语句
一个程序的基本组成单位是函数
只需要知道函数名字和括号里面要填的内容 就可以调用函数
1、如果代码中有重复的语句--->写成函数 可以缩短代码量 提高效率
2、用的时候知道函数名+参数 直接调用 有问题时 只需要检查单个函数
int main()
int 函数类型/返回值类型
main 函数名字
() 里面要写参数 如果里面不写 表示没有参数 或者写void 都表示没有参数
{} 里面是函数体
return 跳出这个函数 后面如果有值 称之为返回值
如果返回值类型void return 后面可以不加内容也可以省略return
return 后面的值由前面的函数类型决定
void main()
{
return;//后面不需要加值 或者可以省略
}
void 表示空 1、放在函数名前面(返回值类型) 表示函数没有返回值
2、放函数()里面 表示函数没有参数
比较常用的函数 (一般情况下是看不到函数体的)
void outtextxy(int x,int y,lpctstr str);
1、知道怎么用 函数+参数调用 函数作用
2、返回值 返回值作用
stecmp 比较两个字符是否相等
malloc 申请内存 返回申请的内存的首地址
定义函数的时候--->函数()里面的是参数 int a,int b
调用的函数的时候 函数括号里面的参数is_max(x,y,z) 实参
形参 定义时候的参数 自己取的名字 函数内部使用的参数
实参 指实际参数 在调用函数的时候用的参数 可以使变量可以使常量 作用是将一个值传递给形参
实参与形参只是赋值的关系
调用时 是把实参的值赋给了形参
修改形参时,并不会影响实参
从主函数(main)开始 从上往下
遇到调用函数的位置 用实参给形参赋值 调用之后return到调用的位置
继续往下执行
形参的值不会影响实参
通过传递地址的方式,修改主函数的变量、数组(指针的作用之一)
调用之前先定义函数-->直接定义
如果是在调用之后定义的函数 必须在前面刷存在感(就是将定义的函数放在主函数之后时,在调用的时候提前声明)
返回值+函数名+参数
代码:
1、头文件
2、类型定义,全局变量
3、函数声明
4、主函数
5、函数定义
关于函数声明 函数定义中的形参名字 (如果有的话)必须保持一致
声明 刷存在感 (声明中的 参数名字可以省略不写
递归 和函数参数的写法
作用域
变量作用域 生存周期
{} if for 函数{}
在{}定义的变量 出了{}不能用 {}作用域
1、全局变量 函数外部定义 作用域 作用于整个文件 生存周期 程序运行时间
2、局部变量 {}定义 作用域只作用于{]里面 生存周期 出了{}自动回收
3、静态变量 statie修饰的变量 生存周期 通全局变量
作用域 看它定义的位置
stayic 静态变量 只会定义一次 下一次接着上一次的值继续使用
测试代码:
1 #include<stdio.h> 2 #include<string.h> 3 #if 0 4 /*设计一个函数 5 1、确定函数的功能 例如 比较三个数字那个最大 6 2、取函数名字 不能和已有的标识符 关键字 函数重名 7 is_max(a,b,c) 参数 确定顺序 确定个数 参数类型 8 3、返回值 可以先写void 9 //is_max(a,b,c) 10 参数 确定顺序 确定个数 参数的类型 11 调用的时候()里面可以使变量 页可以是常量 12 13 */ 14 int is_max(int a,int b,int c) 15 { 16 //c = 22; 17 if (a > b) 18 { 19 if (a > c) 20 { 21 //printf("a最大"); 22 return a;//可以返回一个值 最大值 23 } 24 else 25 { 26 return c;//有返回值 前面函数类型要对应为int 27 } 28 } 29 else 30 { 31 if (b > c) 32 { 33 return b; 34 } 35 else 36 { 37 return c; 38 } 39 } 40 41 //return; 42 } 43 //自定义函数 可以写在主函数体之前 或者之后 44 //写在主函数之前在主函数里面调用的时候可以直接调用 45 //写在主函数之后在主函数里面调用的时候需要在主函数值前进行函数声明 46 #endif 47 48 int x;//全局变量 作用域 作用于整个文件 生存周期程序运行时间 49 50 51 void swapint(int a, int b) 52 { 53 int temp = a; 54 a = b; 55 b = temp; 56 printf("函数里面a=%d,b=%d\n",a,b); 57 } 58 void swappoint(int *p, int *q) 59 { 60 int temp = *p; 61 *p = *q; 62 *q = temp; 63 printf("主函数中a=%d,b=%d\n",*p,*q); 64 65 } 66 67 void fun() 68 {//作用域在{}里面 但是出了{}之后不会被系统回收 69 static int x = 0;//static修饰的变量 定义只定义一次 70 x++; 71 printf("%d",x); 72 } 73 74 75 76 77 int main()//主函数 78 { 79 ////代码 80 //printf("hello");//有参数的函数 81 ////1、int *p = (int*)malloc(sizeof(int));//返回值 返回被调用的函数 返回值赋值给p 82 //int t=is_max(1, 2, 3);//函数调用 返回值是int 定义一个int变量来接收 83 ////is_max 把1的值赋给了a 把2值赋给了b 然后把3值赋给了c 84 //printf("%d",is_max(1,2,3)); 85 //int x = 1, y = 2, z = 3; 86 //is_max(x, y, z); 87 //printf("hello");//有参数的函数 88 89 int a = 2, b = 3; 90 swapint(a, b);//通过函数交换ab的值 91 printf("主函数中a=%d,b=%d",a,b); 92 swappoint(&a, &b); 93 printf("主函数中a=%d,b=%d\n",a,b); 94 95 //if (1) 96 //{ 97 // int myint; 98 // myint = 1; 99 //} 100 ////myint = 1; 不可用 101 fun(); 102 fun(); 103 fun(); 104 105 106 getchar();//没有参数的函数 107 return 0; 108 }
附:
形参和实参
函数
//class 1-------------------------------------------------------------------------------------------------------------------------------------//
//class 2-----------------------------------------------------------------------------------------------------------------------------------//
2018-11-16 09:39:15
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论