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);}
标签:va,ap,int,list,++,ret,C语言,第六天 From: https://www.cnblogs.com/gunancheng/p/17441869.html