《C和指针》学习笔记

《C和指针》学习笔记

第七章

7.4 ADT

其实我之前在对C语言的学习中很少会涉及到抽象数据类型(ADT),这个一般在C++语言的学习中会涉及到抽象数据类型的设计。这本书里面也提到了C的抽象数据类型的设计。
C语言中利用 static关键词的合理使用来限制对模块的访问。这里有个例子来说明模块的一种可能的实现方法。
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);

addrlist.c

#include "addrlist.h"
#include <stdio.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+=1)
		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];
}

7.5 递归

C中是通过运行时堆栈支持递归函数的实现。递归函数 就是直接或者间接的调用自己的函数。

#include <stdio.h>


void binary_to_ascii(unsigned int value)
{
	unsigned int quotient;
	quotient = value / 10;
	if (quotient != 0)
		binary_to_ascii(quotient);
	putchar(value % 10 + '0');
}

追踪一个递归函数执行过程的关键是理解函数中所声明的变量是如何存储的。当函数被调用时,它的变量的空间是创建与运行时堆栈上的。以前被调用的函数的变量仍保存在堆栈上,但它们被新函数的变量所覆盖,因此是不能被访问的
递归调用语句本身在前面没有结束递归的过程时,效果类似与循环,但是递归调用会保存一些信息,也就是保存在堆栈里面的变量值

7.6 可变参数列表

有的函数的参数列表包含可变的参数数量和类型,它们可以用stdarg.h 头文件所定义的宏来实现。参数列表的可变部分位于一个或多个普通参数的后面,在函数原型中用省略号表示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值