目录
一、函数
1.定义
类型名 函数名(参数列表)
{
函数体
}
2.函数的声明
所谓声明(Declaration),就是告诉编译器我要使用这个函数,你现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。
代码举例:
#include <stdio.h>
void print_C();//函数的声明
//函数的定义
void print_C()
{
printf(" ###### \n");
printf("## ## \n");
printf("## \n");
printf("## \n");
printf("## \n");
printf("## ## \n");
printf(" ###### \n");
}
int main()
{
print_C();//函数的调用
return 0;
}
运行结果:
3.函数的参数和返回值
- 有时候,函数需要接收用户传入的数据,就需要使用到函数的参数。根据需求,函数的参数可以有多个,类型也可以各不相同。而函数的返回值通常的反馈函数的计算结果,也可以用来表示函数的执行结果。
代码实战1:编写一个函数sum,由用户输入参数 n,计算 1 + 2 + 3 + ... +(n-1)+ n 的结果并返回。
代码如下:
#include <stdio.h>
int sum(int n);
int sum(int n)
{
int result = 0;
do
{
result += n;
}while(n-- > 0);
return result;
}
int main()
{
int n,result;
printf("请输入n的值:");
scanf("%d", &n);
printf("1+2+3+...+(n-1)+n的结果是:%d\n",sum(n));
return 0;
}
运行结果:
代码实战2:编写一个函数max,接收两个整型参数,并返回它们中的较大的值。
代码如下:
#include <stdio.h>
int max(int,int);
int max(int x,int y)
{
if(x > y)
return x;
else
return y;
}
int main()
{
int a,b,c;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
c = max(a,b);
printf("它们中的较大值是:%d\n",c);
return 0;
}
运行结果:
二、参数和指针
1.形参和实参
- 形参:形式参数;实参:实际参数。
- 形参和实参用于数据传输。当函数发生调用时,实参的值会传递给形参,且传输具有单向性。
- 形参变量只在函数的内部有效。
2.传值和传址
不使用指针时:
代码举例:
#include <stdio.h>
void swap(int x,int y);
void swap(int x,int y)
{
int temp;
printf("In swap,互换前:x = %d, y = %d\n",x,y);
temp = x;
x = y;
y = temp;
printf("In swap,互换后:x = %d, y = %d\n",x,y);
}
int main()
{
int x = 3,y = 5;
printf("In main,互换前:x = %d, y = %d\n",x,y);
swap(x,y);
printf("In main,互换后:x = %d, y = %d\n",x,y);
return 0;
}
运行结果:
使用指针后:
代码举例:
#include <stdio.h>
void swap(int *x,int *y);
void swap(int *x,int *y)
{
int temp;
printf("In swap,互换前:x = %d, y = %d\n",*x,*y);
temp = *x;
*x = *y;
*y = temp;
printf("In swap,互换后:x = %d, y = %d\n",*x,*y);
}
int main()
{
int x = 3,y = 5;
printf("In main,互换前:x = %d, y = %d\n",x,y);
swap(&x,&y);
printf("In main,互换后:x = %d, y = %d\n",x,y);
return 0;
}
运行结果:
3.传数组
代码举例:
#include <stdio.h>
void get_array(int b[10]);
void get_array(int b[10])
{
printf("sizeof b: %d\n",sizeof(b));
}
int main()
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
printf("sizeof a: %d\n",sizeof(a));
get_array(a);
return 0;
}
运行结果:
4.可变参数
#include <stdarg.h>
-va_list
-va_start
-va_arg
-va_end
代码举例:
#include <stdio.h>
#include <stdarg.h>
int sum(int n, ...);
int sum(int n, ...)
{
int i,sum = 0;
va_list vap;
va_start(vap,n);
for(i = 0;i < n; i++)
{
sum += va_arg(vap,int);
}
va_end(vap);//关闭参数列表
return sum;
}
int main()
{
int result;
result = sum(3, 1, 2, 3);
printf("result = %d\n",result);
result = sum(5, 1, 2, 3, 4, 5);
printf("result = %d\n",result);
result = sum(6, 3, 1, 2, 4, 99, 100);
printf("result = %d\n",result);
return 0;
}
运行结果: