C语言自学完备手册(15)——函数(1)

自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


版权声明


之前我们都是在main( )函数中写写代码,并且调用一些系统自带函数;例如:printf(),puts(),scanf()等等,它们也被称为库函数。从本小结开始介绍自定义函数。换言之,我们要开始写自己的函数了。

函数的定义

语法概述:

返回值类型 函数名 (类型1 参数1,类型2 参数2,……..){
    函数体
}

示例如下:

int max(int a,int b){
    if(a>b){
        return a;
    }else{
        return b;
    }
}

假若函数没有返回值,则在定义函数时用void表示其返回值;同理,假若该函数没有输入参数,则在定义函数时用void表示其输入参数,例如:

void printMessage(void){
    puts("hello");
}

此处定义的函数printMessage( )既没有输入参数、也没有返回值。


函数的原型声明

我们常见的写法是:函数定义在main( )函数之前,然后在main( )函数中调用。如果函数定义在main( )函数之后,并想在main( )函数中调用,那么此时就需要对函数进行原型声明。

语法概述:

返回值类型 函数名 (类型1 参数1,类型2 参数2,……..);

示例如下:

#include <stdio.h>
#include <stdlib.h>
void printMessage(void);
int main()
{
    printMessage();
    return 0;
}

void printMessage(void){
    puts("hello");
}

在本示例中,通过第三行的代码,即void printMessage(void);对函数进行原型声明。假若去掉这行代码,那么开发工具报警告:implicit declaration of function ‘printMessage’


头文件和文件包含指令

通过函数原型声明,可以告知编译器:函数的名称,输入参数,返回值等等信息,这样就可以放心地调用该函数了。

我们平常用的库函数printf( )、puts( )等的函数原型声明都包含在了<stdio.h>中,因此必须要使用include指令导入所需的头文件(.h),即:

#include <stdio.h>

通过该指令可以把<stdio.h>中的全部内容读取到程序中。


练习

求出整数x的n次幂,代码如下:

#include <stdio.h>
#include <stdlib.h>
int power(int x,int n);
int main()
{
    int result=power(3,4);
    printf("计算结果是:%d",result);
    return 0;
}

int power(int x,int n){
    int result=1;
    while(n>=1){
        result=x*result;
        n--;
    }
    return result;
}

值传递

在C语言中,函数间参数的传递是通过值传递进行的。

例如,在刚才的示例中x和n是形参;3和4是实参;我们可以形象的理解为:形参x是实参3的副本,形参n是实参4的副本;形参和实参间相互独立,互不影响。这点类似于日常生活中的原件和复印件的关系:在复印件上写写画画不会更改原件,反之亦然。

那么,Java中是传值还是传引用呢?可以参见我的另外一篇博客——《再探Java内存分配》

猜你喜欢

转载自blog.csdn.net/lfdfhl/article/details/81044809