对于C语言中函数的初步学习

自定义函数:

格式:函数类型     函数名(形式参数类型说明表)

            {     声明部分     

                  执行部分

            }

函数调用的形式:

(1)作为函数语句调用。函数一般无返回值。例: printf(“Hello,World!\n”);

(2)作为函数表达式调用。例: m=max(a,b)*2;

(3)作为函数参数调用。例: printf(“%d”,max(a,b));    m=max(a,max(b,c));

形参与实参:

形式参数:定义函数时函数名后面括号中的变量名

实际参数:调用函数时函数名后面括号中的表达式

例题:比较两个数并输出大者。

#include <stdio.h>
void main()
{   int a,b,c;
    scanf("%d,%d",&a,&b);
    c=max(a,b);
    printf("Max is %d",c);
}
int max(int  x, int  y)
{   int z;
    z=x>y?x:y;
    return(z);
}

值传递方式方式:   函数调用时,为形参分配单元,并将实参的值复制到形参中;   调用结束,形参单元被释放,实参单元仍保留并维持原值。

地址传递方式: 函数调用时,将数据的存储地址作为参数传递给形参。

关于static的使用

函数中的局部变量的值在函数调用结束后不消失而保留原值,以便下一次调用该函数时可以使用上一次调用的最后结果。这时就应该指定该局部变量为“静态局部变量”。

#include <stdio.h>
void  increment(void);
void main()
{   
     increment();
     increment();
     increment();
}
void  increment(void)
{   int x=0;
     x++;
     printf(“%d\n”,x);
}

运行结果:
1
1
1
#include <stdio.h>
void main()
{   void  increment(void);
     increment();
     increment();
     increment();
}
void  increment(void)
{   static int x=0;
     x++;
     printf(“%d\n”,x);
}

运行结果:
1
2
3

extern声明外部变量的使用:

外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。

file1.c:
static int A;
main()
{  int power(int);
    int b=3,c,d,m;
    A=3;  m=2;
    c=A*b;
    d=powe(m);
}
file2.c:
extern int A;
power(int n)
{  int i,y=1;
    for(i=1;i<=n;i++)
        y*=A;
    return(y);
}

此时file2.c中的A就无法使用了。

那么结合上一篇关于C语言中的数组问题,和这篇关于函数的内容,我们可以写出一个冒泡排序,来了解下函数运行的过程:

#include <stdio.h>

void  input(int a[], int length)
{
    int i;
    printf("输入10个整数:\n");
    for (i = 0;i < length; i++)
    {
        scanf("%d", &a[i]);
    }
}

void cmp(int a[], int length)
{
    int j, i;
    int tmp;
    for(i = 0;i < length; i++)
    {
        for (j = 0; j < length - i -1; j++)
        {
            if (a[j+1] < a[j])
            {
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
}

void output(int a[], int length)
{
    int i;
    for(i = 0; i < length;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}

int main()
{   
    int a[10] = {0};
    int length = sizeof(a) / sizeof(a[0]);

    input(a,length);
    cmp(a, length);
    output(a, length);

    return 0;
}

函数运行的步骤:

一、通过函数名找到函数的入口地址。( input())。

二、给形参分配空间 (int a,int length)。

三、传值(把实参传给形参)(值传递、地址传递)(length->自定义函数的length)

四、执行函数体(main())

五、返回(return 0;)

★六、释放空间(exit(0))

猜你喜欢

转载自blog.csdn.net/wow66lfy/article/details/81174839