C++学习(二十)(C语言部分)之 函数1 - Yuuki丶

Yuuki- 2021-08-16 原文


C++学习(二十)(C语言部分)之 函数1


函数
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————————————————————————————————————————————-//

  • 函数    一组一起执行一个任务的语句   是程序的基本单位

    • 函数作用
      • 封装代码       使用的用户不需要知道函数如何实现 只需要知道函数功能就可以使用
      • 节省代码行数      对于一些需要重复使用的代码段 用函数可以缩短代码 提高编程效率
      •  
    • 函数组成
      • 函数名
        • 函数的名字(自己定义)
        • 调用的时候知道函数名和参数即可调用
      • 函数类型(返回值类型)
        • 定义的时候写在函数前面的类型 函数后面return后面的类型一致
        • 如果函数不返回任何值 返回类型写void return后面不写任何值(也可以省略return)
      • 参数
        • 函数括号中的内容称之为参数 调用的时候需要传递值进去
      • 函数体
        • 函数具体执行内容的语句
    • 函数的定义和使用方式
      • 函数定义  提供了函数的实际主体(必须有)
      • 函数使用  调用函数的方式 函数名(参数)
      • 函数声明  函数如果在调用之后定义 需要加上函数声明
        • 函数声明一般放前面  包含函数类型 函数名和参数类型(参数名可以省略)
        • 形参和实参
          • 形参      函数在定义时候括号中的参数称之为形参
          • 实参      函数在调用的时候括号中的参数称之为实参
          • 形参和实参可以同名 但是并不是同一个变量 不占同一块内存 修改形参并不会影响实参    形参不改变实参
          • 通过指针可以直接通过地址修改调用函数中的变量

//class 2———————————————————————————————————————————–//

  • 递归

    • 函数在函数定义的时候调用本身(自己直接或者间接调用自己)称之为递归
    • 优点
      • 少量代码即可描述出一个需要重复计算的问题
      • 循环能实现的递归都能实现,但是递归能实现的,循环未必能实现
    • 缺点
      • 相当于其他常用方法(比如循环)效率较低
      • 每次调用都会为参数和返回值开辟栈区内存 递归次数过多容易引发栈溢出
  • 注意事项

    • 作用域
      • 在{}内部定义的变量都是局部变量 作用域只在这个{}中(比如函数中 或者if和for的括号中)
      • 在{}外部定义的是全局变量  全局变量可以使用在定义之后的任何函数中
      • 不同作用域之间的变量允许同名 不会重定义
      • 有多个不同作用域之间的同名变量 使用的是最近定义的一个在作用域内的变量(就近原则)
    • 命名规则
      • 函数名命名规则同变量命名规则
      • 只能数字字母下划线组成 不能用其他字符 不能使用关键字
    • 函数定义和函数声明要保持一致 返回值类型  函数名 参数(如果声明中有形参名字 这个要和定义的时候保持一致)
    • 函数的形参不能改变实参
  • 了解

    • 指针函数  返回值为指针的函数   比如strcpy  strcat返回的都是指针  malloc
    • 函数指针  指向函数的指针
      • 一般用于传递函数名作为参数的情况
      • 写法  比如int fun(int x)—>对应的函数指针  int (*pfun)(int)函数名换成(*pfun)就行
      • 函数指针赋值后使用方式同函数名一样

 

 

2018-11-16  09:39:15

 

发表于
2018-11-16 09:42 
Yuuki丶 
阅读(423
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Yuuki-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Yuuki-/p/9967518.html

C++学习(二十)(C语言部分)之 函数1 - Yuuki丶的更多相关文章

  1. SQL Server —– 备份数据库 生成(.bak)文件

    转移数据库   备份数据库 选中数据库     进入后界面如图    选择合适位置进行备份     注意:选择 […]...

  2. Excel VBA 连接各种数据库(一) VBA连接MySQL数据库 – 山东喵

    Excel VBA 连接各种数据库(一) VBA连接MySQL数据库   特别提醒:本人看博客园的消息还是比较 […]...

  3. 修改SDE最大连接数 – gisoracle

    View Post 修改SDE最大连接数 使用arccatalog连接数据库出现 :“Failed to co […]...

  4. 1080p – hunningtu

    1080p (1)1080p:1920*1080,p(Progressive Scan,逐行扫描),帧速率通常 […]...

  5. ubuntu14.04下播放器SMplayer的安装 – 王会喜

    ubuntu14.04下播放器SMplayer的安装 1. Mplayer 与 SMplayer的区别  虽然 […]...

  6. UNIX发展史(BSD,GNU,linux) – Dodge

    UNIX发展史(BSD,GNU,linux) 先前的一個理想 UNIX 系统自 1969 年 Ken Thom […]...

  7. Jeffry Richter 北京见面会 – smwikipedia

    Jeffry Richter 北京见面会...

  8. 黑科技抢先尝(续) – Windows terminal中WSL Linux 终端的极简美化指南

    今天这篇文章,主要介绍如何美化 Windows terminal 中 WSL 的 Linux 终端,依然是以本 […]...

随机推荐

  1. PKU 1011 Sticks

    Sticks http://poj.org/problem?id=1011 Time Limit: 1000M […]...

  2. HTML 5 video 格式转换 ogg webm

    http://www.w3.org/TR/html5/video.html#the-source-elemen […]...

  3. MySQL基础之事务编程学习笔记

    MySQL基础之事务编程学习笔记 在学习《MySQL技术内幕:SQL编程》一书,并做了笔记。本博客内容是自己学 […]...

  4. 《MySQL实战45讲》(8-15)笔记 – wang03

    《MySQL实战45讲》(8-15)笔记 2021-08-16 22:25  wang03  阅读(118)  […]...

  5. 图像处理检测方法 — SIFT和SURF

    0、特征与匹配方法总结汇总对比   参考网址:http://simtalk.cn/2017/08/18/%E7 […]...

  6. 如何写一个简单的HTTP服务器(重做版)

    如何写一个简单的HTTP服务器(重做版) 最近几天用C++重新写了之前的HTTP服务器,对以前的代码进行改进。 […]...

  7. PLT与GOT

    0x01  什么是PLT和GOT 名称: PLT : 程序链接表(PLT,Procedure Link Tab […]...

  8. 力软敏捷框架集成布局插件(ce-layout)

    最近用力软的框架觉得框架在布局这块不是很友好特别是对像css不是很好的程序员来说,大部分大家都是后端程序员。 […]...

展开目录

目录导航