《函数》
对于函数的参数压栈,从右往左进行压栈
C语言传递方式:按值传递,按址传递
extern:引入外部变量的符号
extern “c”:引入外部c语言代码
extern去引入外部全局数组时,需要注意什么?
extern int arr[1]类型是什么就引用什么
int data1 = 10;//全局变量
void Fun1()
{
data1++;
printf("%d\n",data1);
}
void Fun2()
{
int data2 = 10;//局部变量
data2++;
printf("%d\n",data2);
}
static int data3 = 10;//静态全局变量
void Fun3()
{
data3++;
printf("%d\n",data3);
}
void Fun4()
{
static int data4 = 10;//静态局部变量
data4++;
printf("%d\n",data4);
}
int main()
{
//printf("%d\n",gloable_data);
//printf("%d\n",arr[1]);//*(1+1)
//printf("arr == %d\n",arr);
for(int i = 0;i < 10;i++)
{
//Fun1();
//Fun2();
//Fun3();
Fun4();
}
return 0;
}
//比大小
int Max(int a,int b)
{
return a > b?a:b;
}
int g_data = 10;//全局变量
static int g_data2 = 90;//静态全局变量
int main()
{
int a = 10;//局部变量
static int c = 20;//静态局部变量
int b = 20;
int c = Max(a,b);
printf("%d\n",c);
return 0;
}
int Max2(int a,int b)
{
return a>b?a:b;
}
int g_data=10;//全局变量
static int c=20;//静态全局变量
int main()
{
int a=10;
int b=9;
int c=Max2(a,b);
printf("%d\n",c);
return 0;
}
//bss段的作用是什么:未初始化的全局变量和未初始化的静态的局部变量
static int g_data1=10;//data
static int g_data2=0;//bss
static int g_data3;//bss
int g_data4=10;//data
int g_data5=0;//bss
int g_data6;//common,bss
int main()
{//text
static int data1=10;//data
static int data2=0;//bss
static int data3;//bss
int data4=10;//text
int data5=0;//text
int data6;//text
return 0;
}//text
函数指针:int (*Pfun)(int,int)
指针函数:int *Pfun(int,int)
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int (*Pfun)(int,int)=Max;
int Max=Pfun(10,20);
printf("%d\n",Max);
return 0;
}
//年龄计算
int Age(int n)
{
int tmp=10;
for(int i=1;i<n;i++)
{
tmp+=2;
}
return tmp;
}
对于代码本身来说,纵向执行
递归:
趋近一个临界值,调用自己本身
int Age2(int n)
{
int tmp;
if(n==1)//临界条件
{
tmp=10;
return tmp;
}
else
{
tmp=Age2(n-1)+2;//递归,保存现场,递归发生在栈上,控制递归的次数
return tmp;
}
}
int main()
{
printf("%d\n",Age2(5));
return 0;
}
/
/
int Fun(int n)
{
int tmp=1;
for(int i=1;i<=n;i++)
{
tmp*=i;
}
return tmp;
}
*/
/*递归:
int Fun(int n)
{
int tmp;
if(n==1)
{
tmp=1;
return tmp;
}
else
{
tmp=Fun(n-1)*n;
return tmp;
}
}
int main()
{
printf("%d\n",Fun(5));
return 0;
}
*/