C语言函数
代码的集合
函数定义
【返回值类型】【函数名(地址)】(【输入参数】)
函数指针
【修饰指向的空间】(*【修饰当前指针】p【修饰当前指针】)【【函数修饰符】修饰指向的空间】
【修饰指向的空间】(*p)【【函数修饰符】修饰指向的空间】
【修饰指向的空间】(*p)(type1, …, typeN);
type (*p)(type1, …, typeN);
int (*p)(char, int);
int fun (char arg1, int arg2) {
...
}
p = fun;
p('a', 1);
函数指针数组
【修饰指向的空间】(*【修饰当前指针】p【【数组修饰符】修饰当前指针】)【【函数修饰符】修饰指向的空间】
【修饰指向的空间】(*p[n])【【函数修饰符】修饰指向的空间】
【修饰指向的空间】(*p[n])(type1, …, typeN);
type (*p[n])(type1, …, typeN);
指针数组的 * 修饰数组的成员
输入参数
实参:传入的参数
形参:接收的参数
传递:形参=实参的拷贝(通过传入地址的拷贝使得函数改变传入的参数)
参数的可写
不改变传入的连续空间:type function(const type *);
可能改变传入的连续空间:type function(type *);
printf(const char *format, ...);
sprintf(char *str, const char *format, ...);
连续空间
字符连续空间:首地址*,结束标志:’\0’
type fun(char *p) {
while(p[i] != '\0');
return type;
}
非字符连续空间:首地址*,结束标志:长度(len)
// 单个值修改
type fun( unsigned char *p ) {
for ( int i; i < len; i ++ ) p[i];
return type;
}
// 空间修改
type fun( unsigned char *p, int len ) {
for ( int i; i < len; i ++ ) p[i];
return type;
}
// 空间修改
type fun( void *p, int len ) {
unsigned char *temp = (unsigned char *)p;
for ( int i; i < len; i ++ ) p[i];
return type;
}
返回值
单值
【返回值类型】【函数名(地址)】(【输入参数】);
【返回值类型】【函数名(地址)】(type1, …, typeN);
type fun (type1, …, typeN) { return type; }
连续空间
【返回值类型的指针】【函数名(地址)】(【输入参数】);
【返回值类型的指针】【函数名(地址)】(type1, …, typeN);
type* fun (type1, …, typeN) { return type指针; }
返回的指针不要指向栈空间或无效区域