一、存储类型补充
extern 声明一个变量是外部存放的(用于多文件,对外声明)
static:对外隐藏
e.g. 用extern写一个四则运算代码
思路:在三个文件里分别定义四则运算函数、定义num1和num2、主运算输出函数,并在主函数前用extern引用加减乘除及定义的变量,最终编译三个文件完成运算输出。

二、函数传参
1.整型数组传参
int fun(int array[5]); //不常用,元素固定
int fun(int array[], int len) //常用,元素不固定
#include <stdio.h>
int OutputArray1(int array[], int len)
{
int i = 0;
int max = 0;
max = array[0];
for(i = 1; i < len; i++)
{
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
int OutputArray2(int array[], int len)
{
int i = 0;
int min = 0;
min = array[0];
for(i = 1 ;i < len; i++)
{
if (array[i] < min)
{
min = array[i];
}
}
return min;
}
int main(void)
{
int num[5] = {0};
int max = 0;
int min = 0;
int i = 0;
for (i = 0; i < sizeof(num)/ sizeof(num[0]); i++)
{
scanf("%d",&num[i]);
}
max = OutputArray1(num, sizeof(num) / sizeof(num[0]));
min = OutputArray2(num, sizeof(num) / sizeof(num[0]));
printf("max = %d, min = %d\n", max, min);
return 0;
}
e.g.用接收、运行、输出三个模块编写一个冒泡排序的程序
思路:先定义一个函数用scanf和for循环来接收一个数组,再定义第二个函数用for的嵌套以及if来编写一个冒泡排序的代码,接着定义第三个函数利用for循环输出排序后的数组,最后在主函数内分别调用前面三个函数来实现冒泡排序


e.g.用接收、运行、输出三个模块编写一个数组倒置的程序
先定义一个函数用scanf和for循环来接收一个数组,再定义第二个函数用for循环来完成数组中元素的倒置,接着定义第三个函数利用for循环输出排序后的数组,最后在主函数内分别调用前面三个函数来实现数组元素倒置

2.字符型数组的传递
int fun(char str[]);
e.g.利用字符型数组的传递求出字符的长度
思路:在被调函数中用while遍历求出字符串长度,再在主函数中调用即可输出结果


三、预处理命令
1. 宏定义:
(1)不带参宏:#define PI 3.14(宏名一般定义为全部大写)
(2)带参宏(宏函数):#define MAX(x, y) x > y ? x : y
带参宏没有参数类型、返回值、函数类型相关概念,函数有参数类型、函数类型、返回值相关
概念;带参宏只是代码的替换,没有调用传参过程,函数有调用、传参过程;带参宏是在程序编译时展开,代码体积增大,函数是在程序运行过程中加载,代码体积不会增大;带参宏执行效率高,函数有传参过程,需要调用、传参产生资源开销;简单的代码想要封装模块,优先带参宏;需要严谨的代码逻辑,多行代码,使用函数。
e.g.用带参宏求最小值
思路:在带参宏中利用三目运算符,并在主函数中引用宏定义
#include <stdio.h>
#define MIN(x, y) x < y ? x : y
int main(void)
{
int min = 0;
int num1 = 100;
int num2 = 200;
min = MIN(num1, num2);
printf("min = %d\n", min);
}
2. 头文件的包含
#include <stdio.h>
#include 包含一个文件,文件会在预处理编译时展开
<>:在系统目录下查找该头文件
"":在当前目录下查找该头文件,如果找不到再到系统目录下查
(1)头文件中包含:构造数据类型的定义、全局变量的声明、全局函数的声明、宏定义
(2)工程结构

注:main.c中负责主函数编写,功能代码.c中主要负责功能函数的编写,功能代码.h中主要负责声明功能代码.c中编写的功能函数,调用函数的文件只需加对应函数的.h头文件即可使用该函数
3.条件编译
#if //满足条件代码加入编译
#elif //如果if不满足条件 elif满足加入编译
#else //if不满足代码加入编译
#endif //条件编译结束
#ifdef //定义了该宏,代码加入编译
#ifndef //没有定义该宏,代码加入编译
C语言函数:存储类型、传参与预处理命令

被折叠的 条评论
为什么被折叠?



