找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux-函数

2019-7-24 20:20| 发布者: admin| 查看: 830| 评论: 0

摘要: 一、函数的基本用法1.函数基本信息函数是指一个完成特定功能的代码模块;一般形式:数据类型 函数名称(形式参数列表){语句;return 返回值;}//在函数声明中,形参名可以省略,但参数类型不能省略;doubleabc(doublex ...

一、函数的基本用法

1.函数基本信息


函数是指一个完成特定功能的代码模块;

一般形式:

<数据类型> <函数名称>(<形式参数列表>)

{

语句;

return <返回值>;

}
 //在函数声明中,形参名可以省略,但参数类型不能省略;
 doubleabc(doublex,intx);
 doubleabc(double,int); //利用函数求次幂
 #include<stdio.h>
 intvalue(intx,intn)
 {
         intsum=1;
         for(inti=0;i<n;i++)
        {
                 sum=sum*x;
        }
         returnsum;

 }
 intmain()
 {
         inta,b;
         printf("please a b:\n");
         scanf("%d%d",&a,&b);
         printf("VALUE=%d\n",value(a,b));
         return0;
 }


查看预处理文件 gcc -E xxx.c  -o xxx.i --->vi xxx.i

2.函数的参数传递

1.复制传递(值传递)


尽量使用在又返回值中。

2.地址传递(指针传递)


可使用在无返回值的函数中。
 //通过函数完成交换数据的功能
 #include<stdio.h>
 voidswap(int* ,int*);
 intmain()
 {
     inta,b;
     printf("input two value to swap:\n");
     scanf("%d%d",&a,&b);
     swap(&a,&b);
     printf("a=%d\tb=%d\n",a,b);
     return0;
 }
 voidswap(int*a,int*b)
 {
     intt;
     t=*a;
     *a=*b;
     *b=t;
 }


3.数组作为参数

 //求一维数组的和
 #include<stdio.h>
 intsum(int*,int);
 intmain()
 {
         inta[]={1,2,3,4,5,6,7,8};
         intn=sizeof(a)/sizeof(int);
         printf("SUM=%d\n",sum(a,n));
         return0;
 }
 intsum(int*p,intn)
 {
         intsum=0;
         for(inti=0;i<n;i++)
        {
                 sum=sum+*p;
                 p++;
        }
         returnsum;
 }

3.指针函数


指针函数是指返回值是一个指针的函数

一般格式:

<数据类型> *<函数名称>(参数列表)

{

语句;

return  指针;

}

返回值:全局变量的地址

static变量的地址  static char str[10];

字符串常量的地址 char *p[]="hello";
 //模仿连接字符串
 #include<stdio.h>
 char*stringcpy(char*dest, constchar*src);
 intmain()
 {
         chars1[50]="Hello ";
         chars2[]="JHK";
         printf("LINK=%s\n",stringcpy(s1,s2));
         return0;
 }
 char*stringcpy(char*dest, constchar*src)
 {
         char*r=dest;
         while(*dest)
        {
                 dest++;
        }
         while(*src)
        {
                 *dest=*src;
                 dest++;
                 src++;
        }
         *dest='\0';
         returnr;
 }


4.递归函数


在函数体中,直接或间接调用函数本身。
 //求n的阶乘
 #include<stdio.h>
 intcimi(int);
 intmain()
 {
         inta;
         printf("input:");
         scanf("%d",&a);
         printf("%d!=%d\n",a,cimi(a));
         return0;    
 }
 intcimi(inta)
 {
         intsum=1;
         if(a==1||a==0)
        {
                 returnsum;
        }
         else
        {
                 sum=a*cimi(a-1);
                 returnsum;
        }
 }


5.函数指针


函数指针存储的是函数的地址,也就是函数的入口地址;

形式:

<数据类型> (*<函数指针名称>)(<参数列表>)
 //函数指针的使用;
 #include<stdio.h>
 intadd(inta,intb)
 {
     returna+b;
 }
 intmain()
 {
     intm=15,n=15;
     int (*p)(int, int );//函数指针的声明
     p=add;
     printf("%d\n",add(m,n));
     return0;
 }
好处:可以指向返回值和参数类型相同的不同函数。

用处:线程创建--pthread,以及qsort;


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:行走在人世间的小A,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了