第七章:函数
- 函数调用之前若编译器没看到函数原型,则默认返回整形
#include <stdio.h>
/*值的1的位数的奇偶校验*/
int even_vailidity(int value, int n_bits )
{
int parity = 0;
while( n_bits > 0)
{
parity += value & 1;
value >> 1;
n_bits -= 1;
}
return (parity % 2) == 0;
}
/*两两交换*/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
/*数组元素置0*/
void clear_array(int array[], int n_elements)
{
while (n_elements > 0)
array[--n_elements] = 0;
}
int main(void)
{
/*test 1*/
int ans = even_vailidity(6,4);
printf("%d\n",ans);
/*test 2*/
int a = 1, b = 2;
swap(&a,&b);
printf("a:%d \t b:%d\n",a,b);
/*test 3*/
int ar[] = {1,2,3};
int n = sizeof(ar)/sizeof(int);
clear_array(ar,n);
while (n > 0)
printf("%d\t",ar[--n]);
return 0;
}
- static实现黑盒设计
/*addrlist.h*/
#ifndef CPOINTER_ADDRLIST_H
#define CPOINTER_ADDRLIST_H
#define NAME_LENGTH 30
#define ADDR_LENGTH 100
#define PHONE_LENGTH 11
#define MAX_ADDRESSES 1000
char const *
lookup_address(char const *name);
char const *
lookup_phone(char const *name);
#endif //CPOINTER_ADDRLIST_H
/*addrlist.c*/
#include "addrlist.h"
#include <stdio.h>
#include <stdlib.h>
/*静态数据禁止外部文件程序访问*/
static char name[MAX_ADDRESSES][NAME_LENGTH];
static char address[MAX_ADDRESSES][ADDR_LENGTH];
static char phone[MAX_ADDRESSES][PHONE_LENGTH];
/*静态数据函数禁止外部文件程序访问*/
static int
find_entry(char const *name_to_find)
{
int entry;
for( entry = 0; entry < MAX_ADDRESSES; entry ++)
if(strcmp(name_to_find, name[entry]) == 0)
return entry;
return -1;
}
/*查找名字*/
char const *
lookup_address(char const *name)
{
int entry;
entry = find_entry(name);
if(entry == -1)
return NULL;
else
return address[entry];
}
/*查找地址*/
char const *
lookup_phone(char const *name)
{
int entry;
entry = find_entry(name);
if(entry == -1)
return NULL;
else
return phone[entry];
}
- 迭代
#include <stdio.h>
long factorial(int n)
{
if( n <= 0)
return 1;
else
return n * factorial(n-1);
}
long fibonacci(int n)
{
if(n<=2)
return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
int main(void)
{
long ans = factorial(3);
printf("%d\n",ans);
ans = fibonacci(4);
printf("%d\n",ans);
return 0;
}
4.可变参数
#include <stdarg.h>
float average(int n_values, ...)
{
va_list var_arg;
int count;
float sum = 0;
va_start(var_arg,n_values);
for(count = 0; count < n_values; count += 1)
sum += va_arg(var_arg, int);
va_end(var_arg);
return sum/n_values;
}
int main(void)
{
float ans = average(4,1,2,3,4);
printf("%f\n",ans);
return 0;
}