C语言第六天
1、函数参数顺序点
1、语句结束时值改变
2、&& || , ? :等运算符、
3、函数参数传递时的求值顺序
int k = 1; func(k,k++);
那K+1,K是等于什么呢,函数参数的运算应该是从 右到左,所以K++的K应该是1,先输出后运算,而K应该是2
int i = 0; printf(“%d,%d,%d”,i++,i++,i++);2 1 0 printf(“%d,%d,%d,%d,%d”, ++i, ++i,i++,++i,i++); 5 5 2 5 0
2、带参数的main函数和命令行参数
main(int argc,char *argv[])
3、可变参数列表
1、#include<stdarg.h>定义了相关方法
2、结构体定义
typedef struct{
char *ao;
int offset;
}va_list;
控制函数
void va_start(va_list ap,last);ap指向可变参数表的中的第一个参数
type va_arg(va_list ap,type);获取参数,第一个参数ap,第二个参数是要获取的参数的指定类型,返回这个指定类型的值,并且把ap的位置指向列表的下一个变量文职
void va_end(va_list ap);关闭ap
void va_copy(va_list dest,va_list src);
相关代码示例(不太懂其实,有需要用到再看看)
#include<stdio.h>
#include<stdarg.h>
float avg(int n,...)
{
va_list args;
int i;
float ret = 0.0;
va_start(args,n);
for(i = 0;i < n;i++)
{
ret += va_arg(args,int);
}
va_end(args);
ret = ret / n;
return ret;
}
int main()
{
printf("averge = %f\n",avg(5,1,2,3,4,5));
printf("averge = %f\n",avg(3,1,2,3));
return 0;
}
4、返回指针值的函数
1、int * a(int x,int y);
5、函数的指针
1、 int (*a)();
2、是函数的物理入口地址
3、类型是指针变量所指函数的返回值类型
int main(){
int swap(int *x,int *y);
int a,b;
int (*p)();
p = swap;
scanf("%d%d",&a,&b);
if(a<b) (*p)//p (&a,&b);
printf("%d %d",a,b)
return 0;
}
另一个示例
#include <stdio.h>
int max(int x, int y)
{int z;
z=x>y?x: y;
return(z);}
int min(int x, int y)
{int z;
z=x<y?x: y;
return(z);}
int add(int x, int y)
{int z;
z=x+y;
return(z);}
int process(int x, int y, int (*fun)( ) )
{int result;
result=(*fun)(x, y);
printf("%d\n", result);}
main( )
{int a, b;
printf("enter a and b:");
scanf("%d, %d", &a, &b);
printf("max=");
process(a, b, max);
printf("min=");
process(a, b, min);
printf("add=");
process(a, b, add);}

浙公网安备 33010602011771号