七、C_base——函数

来源:互联网 发布:南方数据粘贴 编辑:程序博客网 时间:2024/06/06 00:42

【1】函数四大类

        1--- main        2--- 库函数:atoi strcpy printf        3--- 系统调用        4--- 自定义函数

【2】一个程序的入口

        main

【3】 main

        函数原型:int main(int argc,const char *argv[])        argc          //命令行参数表的个数        argc[0]       //命令行第一个参数

【4】函数的定义

        1、参数:                 严格按照函数的要求传参                 1、复制传参                 2、地址传参        2、返回值:                 1、类型必须匹配                 2、int类型的函数的返回值可省略                 3、函数可以有多条return,但只执行其中一条                 4、return 用于返回一个数据,并且结束当前函数                 5、void类型的函数可以使用return;                   return 0;  //正常结束                   return -1;  //一场结束                   return 1;   //正常结束        3、声明:                 主调函数在被调函数之前,需要声明                 函数声明与函数的定义类似,多一个分号。                 例如:                 函数:int fun(int a,int b)                      {}                 函数声明:                      int fun(int a,int b);

【5】 指针函数

        返回值是指针的函数

实例:源码与注释(详细)

1、 1_main.c

#include <stdio.h>#include <stdio.h>//功能:main函数的参数//char *argv[]//本质:数组,元素char *类int main(int argc, const char *argv[]){    printf("argc     = %d\n",argc);       //命令行的个数    //argv[0]相当与第一个传入的字符串的首地址    printf("argv[0]  = %s\n",argv[0]);        printf("argv[1]  = %s\n",argv[1]);    printf("argv[2]  = %s\n",argv[2]);    printf("*argv[0]    = %c\n",*argv[0]);    printf("*(argv[0]+1)  = %c\n",*(argv[0]+1));    //将数值型字符串转化成整数    printf("atoi(arg[1])  = %d\n",atoi(argv[1]));  //  printf("xxxx = %c\n",*argv);    printf("size(argv[0]) = %d\n",sizeof(argv[0]));    return 0;}

2、 2_fun.c

#include <stdio.h>int fun1(){    int a,b,c;    a = 10;    b = 20;    c = a + b;    printf("c = %d\n",c);}int fun2(int a,int b)         //形参{    int ret;    ret = a + b;    return ret;}void fun3(){    printf("hello world\n");    return;            //return 0:正常结束  return -1:异常退出    printf("Hello World\n");}int fun(int a){    if(a > 0)        return 1;    else if(a == 1)        return 0;    else        return -1;}int main(int argc, const char *argv[]){    fun1();    printf("fun2(1,2) = %d\n",fun2(1,2));   //实参    fun3();    fun(-2);    return 0;}

3、 3_fun_arg.c

#include <stdio.h>int fun_1(int a)     //函数实现:a = a + 5,并打印{    a += 5;    printf("a = %d\n",a);    return 0;}int fun_2(int *p)   //指针型形参 *p = *p + 5{    *p += 5;    printf("*p = %d\n",*p);    return 0;}int main(){    int x = 0;     //x并未进入fun_1,只是把0给他运算    fun_1(x);      //a = 5    fun_1(x);      //a = 5    fun_1(x);      //a = 5    printf("x = %d\n",x);    //x = 0    int y = 0;    //y的地址给fun_2,相当与什么都给别人了    fun_2(&y);    //p = 5    fun_2(&y);    //p = 10    fun_2(&y);    //p = 15    printf("y = %d\n",y);   //y = 15}

4、 4_fun_array.c

#include <stdio.h>//数组的遍历访问int fun(int *a, int n){    int i;    for(i=0; i<n; i++)    {    //  printf("*(a+%d) = %d\n",i ,*(a+i));        printf("a[%d] = %d\n",i ,a[i]);    }    return 0;}int main(int argc, const char *argv[]){    int a[] = {0,1,2,3,4,5};    fun(a, sizeof(a)/sizeof(int));    return 0;}

5 、 5_my_strcat.c

#include <stdio.h>//字符串拼接//指针函数:本质是函数,返回值是指针char * my_strcat(char *a, char *b){    char *temp = a;    while(*a != '\0')    {        a++;                //当*a == ‘\0’时跳出循环    }    while(*b != '\0')    {    //  *a = *b;  a++;  b++;*、++第二优先级,右向左结合。        *a++ = *b++;            }    *a = '\0';    return temp;}int main(int argc, const char *argv[]){    char a[32] = "hello "; //h e l l o  w o r l d \0    char b[] = "world";    //           w o r l d \0    printf("a = %s\n", my_strcat(a,b)  ) ;    return 0;}

6、 6_fun.c

#include <stdio.h>#include <math.h>//打印非空格字符,记录空格字符的个数并返回int fun(char *a){    int count = 0;    while(*a != '\0')    {        if(*a != ' ')        {            putchar(*a);        }        else        {            count++;        }        a++;    }    putchar(10);    return count;}int main(int argc, const char *argv[]){    char a[] = "a b  cde   f ghi";    printf("ret = %d\n",fun(a));    printf("a = %s\n",a);    return 0;}