函数8个视频

在之前的课中,使用过函数,比如strcpy函数,strcat函数
 1.power是函数的名称,2.括号里的两个参数是函数的参数 3.double是函数的返回值 在对函数声明的时候要把函数名称写完整,因为这样才知道传的是什么样类型的值。4.在函数说明时,参数里可以省略掉变量名,但是不能省略掉变量类型。

这就是一个基本的函数。从main开始。
  1. main函数是程序的入口,不调用函数自己写的函数不会被触发

  1. 函数说明必须要放在函数调用的前面

如果函数说明在函数调用后面,我们可以用一行来放在main函数的前面

函数声明部分括号里是形参,声明里面需要用到其他变量自己定义用就行了,而函数声明部分里的形参,在main函数里面也可以用。
对于函数来说,必须先说明再调用。一般先说明在使用,如果使用放在了说明前面,则要在开头先声明。
先声明(如上面的代码,要加分号,且变量名称可以省略),再调用,最后再说明(不加分号)。
  1. 为什么要引入头文件?

因为头文件中有函数说明,如果不引入头文件,那么就把需要用到的函数单拎出来进行说明

二、函数的参数传递

(函数之间参数的传递方式:1.全局变量,2.复制传递方式,3.地址传递方式)

全局变量传递

如果把函数声明里的参数全删了,则x和n就会报错,这时候体现除了参数以及传参的重要性。

在include下面定义一个double x=2,int n=3; 这个时候main函数和power里面都可以用x和n这两个变量。但是函数调用的位置不同,而且改变不方便,不建议使用。

复制传递方式

复制传递的意思是,x的值传给a, y的值传给b

举个例子

   实参是a,b,存储的分别是10,20,把实参传递给形参x,y,之后在函数中实现了传过来的值的交换,但是形参的值不会回传给实参,因此在main函数中打印出来之后依然是10,20.也就是说复制传递的方式改变不了实参变量中的赋值。实参的值传给形参,形参不会传给实参

地址传递方式(传递地址,也就是指针传递)

a,b是两个int型变量,x,y分别是指向a和b的指针,*x,*y也是形参

要交换a,b中存储的内容,交换时都要用*x,*y,因为x,y存的是地址,而*x,*y是取a,b中的内容

练习:

问:怎么统计小写字母?答:*p(>=a && <= z),s是实参,*p是形参
man ASCII     查看ASCII码表
 问:把小写字母转换成大写字母,怎么变?
答:*p-='    ' ,这边空格的ASCII值就是32,大小写字母之间差的就是32
问:两个功能放在一个函数里实现吗?
答:可以
问:如何迅速出来这几行代码?
答:输入main 按下tab键,是课程提供的环境才行,配置过vim
复制传递和地址传递的区别在哪里?复制传递只是把实参中的值拿到了形参里面,但没有办法改变实参中的值。
如何实现地址传参也不能改变实参?在函数声明的参数前面加const,如下面代码
int str_fun(const char *p);

三、函数中传递数组参数

传数组,必须传起始地址+元素个数,函数声明,调用都必须是两个参数,不可以在形参里头再用sizeof(a)/sizeof(int),这样的话n就是1,循环一次就结束了
传字符串,传起始地址就可以了,因为可以通过\0来找截止的地址。
int data[ ]=a;这句话是错误的,a是地址,data数组里面都是整型数,可以这么写,int *data
练习:
怎么判断空格?
*p=' '?这样可以吗?答:正确
怎么删除?
if (*p=' '&&*p!=0)
  *p=*(p+1);
想法没错,可以借助于另外一个指针,用s1来遍历,当*s1!=' '时,就赋给s2,到时候输出s2就可以了,这个增加的指针s2,放在函数作用里就可以了,没必要放到main函数里面。

四、指针函数(一)

指针函数的定义:是返回值为地址量的函数

指针函数的返回值类型是以下几种的时候才可以返回。

返回值类型:全局变量的地址,字符串常量的地址,静态变量的地址 !!!

这是一条笔试题

调用方就是printf("%s\n",mystring());这边有一个地址
返回方就是return str,也是返回一个地址
刚进入虚拟机,就出现这个,这个是命令行模式,要把改成插入模式,按i或者是o或者是a切换成插入模式
  1. 使用strcpy函数,最好加一个头文件# include <string.h>

这个地方报什么错?该怎么修改?

str数组是在 *getstring函数中定义的,他是一个局部变量,在*getstring函数结束时,这个变量已经结束了,再返回str的值,他返回的是局部变量的地址,会警告!就和复制传递的意义是一样的!

遇到这个问题应该怎么办?

三种情况的变量存放在静态区

字符串常量

static变量

全局变量

那么我们就有三种修改代码的方法,往这三种上靠

(一)、全局变量(就是把原来定义在getstring函数中的数组,一开始就定义)

(二)、static静态变量

(三)、字符串常量

五、指针函数(二)

设计一个函数需要考虑的三个点

1.函数的功能

2.函数的参数

3.函数的返回值

练习:字符串如何删除空格

     

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值