C语言中的简单函数

1 什么是函数

1 具有特定功能的代码段,即某一段代码组合在一起实现某一功能
 2 函数有名字,通过名字调用函数
 3 函数的作用: 避免重复代码,简化程序,提高开发率,代码可读性
 4 编写程序,分为若干个程序块,每个程序块有多个函数组成.每个函数都能实现某个功能,易于维护

2 定义函数的基本结构和要求

定义函数
    
    返回值类型 函数名(形式参数列表){
      
         功能代码;
        return 返回值: // 如果函数有返回值,必须写return
 
 }
 
 返回值类型: void int char float ......
 函数名: 驼峰命名 举例: printHello.
 参数: 函数的材料
 功能代码: 实现某一功能的代码
 返回值: 提交材料之后,返回的结果,只有一个
 注: 不同的函数中,可以使用相同的变量名

3 定义函数的方法

a 无返回值,无参数

//void hello(){ // 执行2 调用函数方法
//    printf("蓝欧的伙伴们,大家早上好!\n");
//    printf("好,很好,非常好,耶!");
//}
/***
 无返回值 使用void
 无参数   但必须写()
b 无返回值,有参数

void printSum(int a,int b){
    printf("%d + %d = %d",a,b,a + b);
}
 无返回值 使用void表示
 有参数  参数变量可以任意,定义几个参数就要传入几个参数,打印两个数想加的结果

c 有返回值,无参数

int randomFor10To60(){
    return arc4random() % 51 + 10;
}
   (1) 声明返回值类型
    (2) 函数体内要写return语句,否则报错
    (3) 一个函数只有一个返回值
    (4)实际返回值的类型,要和声明返回值的类型一致,如果不一致,强制转换成声明的返回值类型.

d 有返回值,有参数

int sumValue(int a,int b){
   return a + b;

printf("我在return的后面");// return后面的代码永远不会执行

定义的函数要写在main函数的上边

3 调用函数(在main函数中进行)

调用函数: 使用函数名()
     如果没有参数,也要把()写上
     如果有参数,有几个参数,就给几个参数
     参数可以是: 常量,变量,表达式

举例 int a = 3 int b = 4

sumValue(3 4); 调用函数

printf("%d",sumValue(3 4));

4 函数的声明

函数声明有两种一种写在main函数上边另一种自己建立两个文件.h和.m文件中,把函数声明写在.h文件中

把函数实现(函数定义)写在.m文件中,并在main函数前边引入,引入用#import "函数名",用#import<函数名>

引用的是系统的函数,在main函数中调用,调用用函数名

(1) 创建文件时文件名首字母大写,名字用驼峰命名法

举例

a 函数声明的地方

#import <Foundation/Foundation.h>

// 声明的地方: 参数列表可以不写变量名
// 声明: 求两个数的最大值
int maxValue(int a,int b);

// 声明: 求两个数的最小值
int minValue(int a,int b);

b 函数实现(定义)的地方

#import "Function.h"

// 定义: 求两个数的最大值
int maxValue(int a,int b){
    int max = a > b ? a : b ;
    return max;
}

// 定义: 求两个数的最小值
int minValue(int a,int b){
    int min = a < b ? a : b;
    return min;
}

c 函数调用的地方

int main(int argc, const char * argv[]) {
  
   // 函数调用
 
    // 声明: 求两个数的最大值
    //最大值
    printf("最大值:%d\n",maxValue(3,4));
    //最小值
    printf("最小值:%d\n",minValue(4,5));

5 数组作为函数的参数

a. 数组可以作为函数的参数
     b. 数组作为函数的参数时,函数至少要设置两个形参;一个形参接收数组名,另一个形参接收数组元素.
     c. 函数声明形式 返回值类型(int) a[],a[]中不需要填写元素个数
     d. 函数调用形式 数组名作为参数,传入的其实是数组的首地址
     f. 形参和实参的操作的是同一个内存空间.

举例

A 声明函数

#import <Foundation/Foundation.h>

// 声明: 打印整型数组中的元素
void sortArrayForAscend(int array[],int count);

B 实现函数(定义函数)

#import "FunctionAndArry.h"

// 定义: 打印整型数组中的元素
void printArray(int a[],int count){
        //遍历打印
    for (int i = 0; i < count; i++) {
        printf("%d ",a[i] );
    }
}

C 调用函数

int main(int argc, const char * argv[]) {

int array[] = {1,2,3,4,5};
 printArray(array, 5);

时间: 2024-10-10 15:33:56

C语言中的简单函数的相关文章

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

C语言中内存的管理

一  Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙. 1.运行在某个线程上,共享线程的消息队列: 2.接收消息.调度消息,派发消息和处理消息: 3.实现消息的异步处理: Handler能够让你发送和处理消息,以及Runnable对象:每个Handler对象对应一个Thread和Thread的消息队列.当你创建一个Handler时,它就和Thread的消息队列绑定在一起,然后就可以传递消息和runnable对象到消息队列中,执行消息

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型

c语言中的副作用!!千万小心!

今天刚看完书上的副作用,博主觉得呢,副作用其实就在改变变量的值,也就是一个赋值操作!不过刚刚在知道上还是犯了错!!尴尬啊!! 大家都知道,c语言中的赋值操作符是自右向左结合的!! 下面有一个关于赋值中的副作用的例子: #include <stdio.h> int main() { int a = 3; a += a -= a*a; printf("%d\n",a); return 0; } 想到答案了吗?有没有人觉得答案是-3的呢? 小伙伴犯了和博主一样的错咯,正解应该是这

想精度高,可以考虑用c语言中的函数gettimeofday

大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime , 精度只能到秒,而且运行过程中,如果用户改充了系统时间,就会出错了. 用QElapsedTimer. 想精度高,可以考虑用c语言中的函数gettimeofday,微秒级精度 #include <sys/time.h>int gettimeofday(struct timeval*tv, stru

Go语言中使用MySql数据库

Go语言中使用MySql数据库 1.MySQL驱动 Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: https://github.com/Go-SQL-Driver/MySQL 支持database/sql,全部采用go写. https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写. https://github.com/Phil

Go语言中使用SQLite数据库

Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 支持database/sql接口,基于cgo(关于cgo的知识请参看官方文档或者本书后面的章节)写的 https://github.com/feyeleanor/gosqlite3 不支持database/sql接口,基于cgo写的 https://github.com/phf/go-sqlite

Java语言中反射动态代理接口的解释与演示

Java语言中反射动态代理接口的解释与演示 Java在JDK1.3的时候引入了动态代理机制.可以运用在框架编程与平台编程时候捕获事件.审核数据.日志等功能实现,首先看一下设计模式的UML图解: 当你调用一个接口API时候,实际实现类继承该接口,调用时候经过proxy实现. 在Java中动态代理实现的两个关键接口类与class类分别如下: java.lang.reflect.Proxy java.lang.reflect.InvocationHandler 我们下面就通过InvocationHan