第二十六讲 综合运用C(2)

     今天看到有朋友反馈,有人希望尽快讲些C++的内容,又有人想要尽快了解一些关于win32的编程知识,好淋漓尽致的使用学到的C语言,不过我想说,学习C确实是为了更好的学习C++,同时也是更好的学习win32编程。不过在这里可能要给大家泼一盆冷水,如果直接学习win32编程的话是学不好C的,win32更多是API的使用,而我们学习C就是为了更好理解API,所以我觉得侯捷那句话说得很好:勿在浮沙筑高台。话虽这么说,不过我们还是可以说一下win32的编程,不过等我们把我们余留下来的问题先解决了。
昨天留下的问题不知道有没有人考虑,如果有人想要学习C++,想要学习win32的话就应该好好的思考这个问题,这其中不泛OO思想,这正是要学习C++和win32所具备的思想,否则,就算我们学会了C++,可能写出还是C程序,就有些不伦不类了。
言归正传,我们回到昨天的问题上来。既然通讯录不适合用数组分配,也不适合使用动态内存分配,那么我们应该怎么来实现呢?我们想要的添加和删除都很方便的通讯录,而不是这样生硬死板的,那么我们是不是该考虑用指针来完成呢?也就是说,在我们添加一条通讯录的时候应该让他包含一个指针,让这个指针指向这个通讯录的结构,说起来可能有些不好理解,直接看下面的声明:
——————————
struct TelPhone{
char name[20];

char TelNumber[20];


       TelPhone *next;

};


———————————
在说结构的时候,我忘了给大家说一个关键点,就是结构本身不能包含同类型的结构,但是可以包含指向同类型结构的指针。所以我们这个声明是没问题。这样一来,我们每添加一条联系人,这块内存里面同时也包含一个指向联系人的指针,所以我们便可以源源不断的添加,直接内存耗尽,我们想怎么添加怎么添加,再不用顾虑那么多了。
——————————–
struct TelPhone *head = NULL;


struct TelPhone *pre,*current;


———————————–
我们用TelPhone声明三个指针,head指向通讯的开始位置,通常我们将他初始化为空,current指向当前位置,也就是我们正要输入的位置,pre则是指向当前位置的前一个。
在声明对象之后,我们便可以通过动态分配内存来接收输入联系人信息%E