函数的定义就是函数体的实现.
语法:
类型
函数名(形式参数)
代码块swift
函数返回类型和函数名分开写是代码风格的问题,现代语言如swift返回值在函数名和参数表的后面,这样使得某些工程工具追踪源代码时更容易查找函数名.数组
K&RC 的旧式声明:
int *
find_int(key, array, array_len)
int key;
int array[];
int array_len;
{
}函数
为了兼容一些旧的编译器,C标准保留了这种声明格式工具
函数原型用于向编译器提供函数信息.格式上就是函数定义的起始部分+分号.
当程序调用一个没法见到原型的函数时,编译器便认为该函数返回一个整型值.
C函数的全部参数均以“传值调用”方式进行传递,这意味着函数将得到参数值的一份拷贝.这样函数能够放心的修改这个值,而没必要担忧会修该调用程序实际传递给它的参数.
有个例外,若是被传递的参数是一个数组名,而且在函数中使用下标引用该数组的参数,那么在函数中对数组元素进行修改实际上修改的是调用程序中的数组元素.函数将访问调用程序的数组元素,数组并不会被复制,这就是“传址调用”
可是,实际上,传递数组作为参数时是传递的指针的一个拷贝.从这个角度考虑,C函数的全部参数均以传值调用.prototype
传值点用的一个例子:指针
/** 对值进行奇偶校验 @param value 整型参数值 @param n_bits 数值的有效位数 @return 1 : 偶数个 0 : 奇数个 */ int even_parity(int value, int n_bits){ int parity = 0; //计数值中值为1的位的个数 while (n_bits > 0) { parity += value & 1; value >>= 1; n_bits -= 1; } //若是计数器的最低位是0,返回TRUE,表示1的位数为偶数个 return (parity % 2) == 0; }
//交换调用程序中的两个整数值(无效),由于它实际交换的是参数的拷贝 void swapX(int x, int y) { int temp; temp = x; x = y; y = temp; } //传递指向但愿修改的变量的指针, void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } //调用时 swap (&a, &b);//要传递指针