c语言之函数
一、两种传递方式
//值传递方式
void swap (int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int x = 7, y = 11;
printf ("before swapped: ");
printf ("x=%d, y=%d\n", x, y);
swap (x, y);
printf ("after swapped: ");
printf ("x=%d, y=%d\n", x, y);
}
//before swapped: x=7, y=11
//after swapped: x=7, y=11
//值传递方式(数组指针)
void mergestr (char s1[ ], char s2[ ], char s3[ ])
{
int i, j;
for (i = 0; s1[i] != '\0'; i++) //将s1复制到s3中
s3[i] = s1[i];
for (j = 0; s2[j] != '\0'; j++) //将s2复制到s3的后边
s3[i+j] = s2[j];
s3[i+j] = '\0'; //置字符串结束标志
}
int main()
{
char str1[ ] = {"Hello "};
char str2[ ] = {"china!"};
char str3[40];
mergestr (str1, str2, str3);
printf ("%s\n", str3);
}
//Hello china!
二、 变量的储存类型
auto---------自动型(函数内或复合语句中定义,不可定义在函数外)
register-----寄存器型(动态储存类型)
static -------静态型(局部和全局)
extern-------外部型(外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变是是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。它属于静态存储类型。 )
静态局部变量与自动变量
静态局部变量赋值一次,自动变量赋初值可能多次。静态局部变量若在定义时未赋值,则系统自动赋值为0,也属于局部变量,作用域与局部变量一致,但生存周期为整个源程序。
void func ( ) //函数定义
{
auto int j = 0;//多次赋值,对上一次运算不储存运算结果
++j;
printf ("%d ", j);
}
int main()
{
int i;
void func ( ); //函数说明
for (i = 1; i <= 5; i++)
func ( ); //函数调用
}
//1 1 1 1 1
//若auto换成static 1 2 3 4 5
全局变量(外部变量)的说明之前再冠以static就构成了静态全局变量。
静态全局变量只在定义该变量的源文件内有效。
三、函数的嵌套和递归
//递归
void print (int w) //递归函数
{
int i;
if ( w != 0) //递归结束条件
{
print (w-1);//递归,直到W!=0;
for (i = 1; i <= w; ++i)
printf ("%d ", w);
printf ("\n");
}
}
int main()
{
print ( 3 );
}
//1
//2 2
//3 3 3