二维函数作为传参
1、二维数组实现杨辉三角
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int (*p)[100],int h,int l)
{
int i,j;
for(i=0;i<h;i++)
{
//*(*(p+i))=1;
for(j=0;j<l;j++)
{
if(j==0)
{
*(*(p+i)+j)=1;
}
else if(i>0)
{
*(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
//p[i][j] = p[i-1][j]+p[i-1][j-1];
}
}
}
}
int main(int argc, const char *argv[])
{
int arr[100][100]={0};
int line;
scanf("%d",&line);
fun(arr,line,line);
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<=i;j++)
{
printf("%-4d",arr[i][j]);
}
putchar(10);
}
return 0;
}
指针函数
本质是一个函数,返回值是指针类型,返回的是内存地址,strcpy、strcat都是一个指针函数
指针函数不能返回局部变量的地址,指针函数可以返回全局变量、静态局部变量以及实参传递过来的地址,能返回堆区的地址,并且指针函数可以返回生命周期长的变量的地址。
malloc和free动态申请内存的函数
malloc申请的是堆区的空间
free释放的是从堆区使用maollc申请的空间
函数指针
是一个指向函数的指针,多用于回调函数
递归函数
出口,逻辑,条件三要素
关于static生命周期的试验,static的初始化为5,调用一次+2,两次+4,说明static生命周期长,不会被回收掉
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun();
int main(int argc, const char *argv[])
{
int ret=fun();
int ret1=fun();
printf("%d\n",ret);
printf("%d\n",ret1);
return 0;
}
int fun()
{
int a; //变量a的生命周期和作用于再fun函数内
static int b; //变量b的生命周期是程序的开始到结束但是作用域仍然是fun函数内
static int var = 5; //static修饰的变量生命周期是程序开始到结束,所以static修饰的变量支部会被初始化一次
int i=0;
while(i<2)
{
i++;
var++;
}
return var; //printf("%d\n",sum); sum的作用域只在主函数中
作业:
1-4:有道云笔记
5:有道云笔记