1、基本用法
数据类型(返回值类型) 函数名称 (参数,参数){语句序列;return 表达式;};
2、参数传递
全局变量
复制传递
地址传递
统计小写字母,小写字母转大写
3、函数中数组传参
全局数组传递;
复制地址传递:实参为数组指针,形参为数组名;
地址传递方式:实参为数组指针,形参为同类型的指针变量;
删除数组中的某一数据;
strlen
4、指针函数
(1) 数据类型 * 函数名称(参数说明){};
返回值是一个地址;考虑程序时考虑内存;
该代码局部变量传参,出现非法访问;
全局变量,字符串常量或者加static修改变量位置/堆的地址;
(2)a.删除一个字符串的空格(运用两个指针,一个处理一个赋值);
strcpy返回目标的地址;
b.实现字符串的连结;char *strcat(char *dest ,const char *src);strncat;
简化:
while(*dest++);先执行++,进入循环时已经到dest的\0的下一位;
(3)把整数转化成字符串123-->"123";//itoy()把字符串转化成整数;
(4)递归函数和函数指针
递归函数:函数的函数体中直接或间接调本身;有终止条件和递归公式;
求n的阶乘;
斐波那契数列;
1、1、2、3、5
第一项和第二项相同,从第三项开始该项等于前两项之和;
f(x)(1)x=1,x=2
f(x-1)+f(x -2)x>2;
代码实现:
函数指针;//比较指针函数;
函数指针用来存放函数的地址。这个地址是一个函数的入口地址;
数据类型(函数指针所指向的函数的返回值类型)(*函数指针名称)(参数(与所指向的函数的形参保持一致));
int add(int a,int b){}//函数
int (*p)(int a,int b);函数指针
p = add;//函数指针赋值;可以多次赋值调用;函数指针可以调用不同的函数;
(*p)(m,n);//函数指针调用;
//man pthread_create;线程创建;//man在linux中用于打开函数原型文件;
//qsort();数组排序;这两个是函数指针的用法之一;
函数指针数组:
int (*p[2]) ( int a,int b);
调用qsort()完成整型数组排序;
练习写strcat函数原型;连结两个字符串;//运用三个指针,一个记录起始地址,一个存链接后的字符串,一个把自身字符串给存链接的那个字符串;
写一个5的阶乘的递归;
n*fac(n-1);n != 0|| n != 1;