函数基础学习
基本介绍
#include<stdio.h>
/*对于处理冗杂且重复的代码,可以通过函数的方式同时函数也可以解决主函数过于庞大和函数的问题
主流的编写思想还是面向方法
封装的功能
要注意C语言程序的开始都是从主函数开始的
*/
void print_Star();// 函数的声明语句 ,如果函数的定义写在main函数后面时,一定要写函数的声明语句,否则编译器会报错
/*下面是函数的定义,void意思为返回值的类型为空类型,即这一个位置写的是函数的返回值类型
print_Star 是函数的名称
()是C语言区别变量和函数的方式,里面可以放入形式参数(函数的定义的时候)
{}花括号里面则是函数体
return 是一个返回语句,可以实现数据返回主函数的操作,return意味着这个函数体的结束,如果没有return则运行到{}结束
如果有多个return,那大概率是判断语句,判断结果不同对应不同的返回值
*/
void print_Star(){
printf("*****************\n");
printf("********这是一个分割线************\n");
}
example(){ //当不写前面返回值的时候默认为int
printf("****************\n");
return 50;
}
int main()
{
int a;
print_Star();// 调用函数的方法
a=example();
printf("%d",a);
return 0;
}
自定义函数的使用:返回值和参数输入
#include<stdio.h>
int getsum(int n);//由于自定义函数在主函数之后,所以一定要写声明语句
int max(int a,int b);
int main()
{
int a,b,c;
printf("请输入n的数值:");
scanf("%d",&a);
printf("运算的结果为%d\n",getsum(a)); // 这里的a是实际参数,是真正要被输入到自定义的getsum函数当中的
scanf("%d%d",&b,&c);
printf("最大值为%d\n",max(b,c));
return 0;
}
int getsum(int n){ // 这里int n 是形式参数,即变量是由外部的值赋予的,这里面只是一个形式,相当于占位符
int result=0;
int i;
for(i=1;i<=n;i++){
result+=i;
}
return result; //返回值语句,将运算后的值返回
}
int max(int a,int b){
return a>b?a:b;
/*或者这样子写
if (a>b) return a;
if (a<=b) return b;
要注意这里面只会执行一个return
*/
}
易错的一个交换函数
#include<stdio.h>
/*函数的书写时要注意一个函数最好实现一个功能*/
void swap(int *x,int *y);
void swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}
//void swap1(int *x,int *y)
//{
// int *t;
// *t=*x;
// *x=*y;
// *y=*t;
// } 这样子书写的就是错的
int main()
{
int a=3,b=4;
printf("交换前%d,%d",a,b);
swap(&a,&b);
printf("交换后%d,%d",a,b);
return 0;
}
形式参数与实际参数的区别
#include<stdio.h>
void get_array(int b[10]);
void get_array(int b[10]){
printf("size in function:%d\n",sizeof(b));//这里是形式参数,是一个地址,只占一个地址的尺寸。32位4,64位8
}
int main()
{
int *p=NULL;
int a[10]={1,2,3,4,5,6,7,8,9,0};
printf("size in main funtion:%d\n",sizeof(a));//这里输出的数组的大小
get_array(a);
printf("%d",sizeof(p));
return 0;
}
不确定的参数函数的使用及正则表达式使用
#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);//从列表的n即第一个参数开始
for(i=0;i<n;i++){
sum += va_arg(vap,int);//在列表中遍历int类型的参数
}
va_end(vap);//关闭参数列表
return sum;
}
int main()
{
char str[50];
int result;
result=sum(4,2,3,4,5);
printf("%d\n",result);
result=sum(10,2,3,4,5,9,1,0,15,454,85);
printf("%d\n",result);
result=sum(7,2,3,4,5,154,154,454);
printf("%d\n",result);
result=sum(5,2,3,4,5,452);
printf("%d\n",result);
printf("**************这是一条分割线*******************\n");
/*正则表达式的应用*/
sscanf("123456789abcABC","%[^a-z]",str);//去除小写的字母
printf("%s\n",str);
scanf("%[^A-Z]",str); // 读到大写的字母(不包含大写字母)为止
printf("%s\n",str);
return 0;
}
stdarg的使用方式
C语言可变参数与字符串处理函数的灵活使用