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);}

  

posted @ 2023-05-29 22:53  风中凌乱的猪头  阅读(18)  评论(0)    收藏  举报