都说c语言的核心是函数,那么如何写一个函数?
- 确定函数功能,要求职责尽量单一
- 分析已知,未知(已知:参数,常量)
- 写出函数头
- 步骤分析(伪代码,或流程图)
- 编码
- 调试
main函数的参数:
int main(int argc, char * argv[])
main函数有两个参数,第一个表示输入的参数的个数,第二个表示输入参数(字符串)的地址。
../exe/test.o aaa bbb
执行这样的命令时
argc = 0;
argv[0] 指向字符串 ../exe/test.o 的首地址
argv[1] ```````` aaa ````````````
一直不太明白的 函数指针 ,今天也大概知道是怎么回事了。
函数指针 有两大作用:
- 将声明的函数指针作为结构体的成员(可以达到类似java类中的方法的作用)
- 作为函数的形参
函数指针声明与赋值:
Type (*函数名)(T1 t, T2 t2 ...);
如: int (*pf)(int param);
Type (*pf)(int param) = NULL;
pf = func;// func为存在的函数名, 这种赋值更常用
示例代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sayAge(int age);
void checkAge(int age, int (*check)(int num));
int check(int num);//check的形参是被 checkAge定义好了的,因为 checkAge 作为一个可能通用的函数,在 check 之前已定义好,并且 checkAge 的逻辑是直接使用 check的返回值; 而被定义的 check 则是为了满足的ckeckAge 通用性,后期根据需要编写的必需要符合 checkAge 定义要求的一个 函数。并在使用时,通过函数指针传给 checkAge。
//声明一个Person结构体
struct Person
{
int age;
void (*say)(int age); //使用函数指针,为Person声明一种说出age的行为
};
int main()
{
struct Person p = {};
p.age = 3;
p.say = sayAge;
p.say(p.age);
checkAge(p.age, check);
return 0;
}
void sayAge(int age)
{
printf("age = %d\n", age );
}
void checkAge(int age, int (*check)(int num))
{
if(1==check(age))
{
printf("YES\n");
}else{
printf("NO\n");
}
}
int check(int num)
{
return num < 18 ? 0 : 1;
}