再看C语言和数据结构(一)

大学已到大四了,从大一开始接触到C,大一课程设计中学习到用C写菜单(现在想起来觉得有点好笑),后来学习C++,接着接触.net,学习了C#,这一路过来回忆起来过程还是很享受的。

    而今由于要应付考试和工作面试,又开始操作起很久以前的C语言和数据结构,感觉过程依然是那么的享受,现在就重看C语言和数据结构再谈一下心得。

   经历.net的历程,再回到C的编辑环境很是不爽,不过还好抛弃了原来的Turboc 2.0,使用Win-tc对于编辑还是要很多的。

现首先就C一些注意的地方讲一下吧。

       1、typedef 的用法

        最近看了谭浩强的那本,介绍的很好,我想就一般大家不容易看懂的地方说一下,比如定义一个10个大小的字符数组,如果你想把它定义成一种类型,也就是这个标识符已使用就是定义个10个大小的字符数组过程是这样的。

        1、写出正常定义的方式  这里就是:   char  c[10];

       2、然后在前面加typedef   ,即typedef char c[10];

       3、最后把那个定义的变量改成你想要的名字(这里就是c), 如改成STR 就是  typedef char STR[10];

       4、以后使用就可以使用STR 来定义变量了,如STR a;//则a就是一个10个大小的字符数组。

    你可以自己对一个结构体式一下,相信就能体会其中的奥妙了,这就是为什么MFC 中有那么多typedef了

       2、#define 的用法

         一般对于#define的用法用一个标识符代替一个常量,我想这没有什么好讲的,但是对于带参数的#define 就不同了,其作用好比一个函数,例如

       #define LT(a,b) ((a)<(b))

    那么好了这里比较a,b 两个变量的大小,若a<b则返回真,否则返回假。

   那么这个与使用函数比较有什么不同呢? 其调用开销小,其实际是在编译过程中将你代码中相应的这些代替。在MFC中有很多这样的东东,可以去找找。

      3、字符串的用法

       C风格的字符串,在我理解大概C风格字符串中大概都是以'\0'结尾的字符串,其'\0'就是ASCII表中的0,没有任何意义,对于C中标准的库中printf("%s",....)内部实现我想就应该是这样检测的,那么对于它我觉得应该注意这几方面问题:

       对于sizeof(),strlen()应该立马知道结果,这表示对于C风格字符基本了解了,sizeof是对于这个字符数组或者字符指针所指向的地方需要分配内存的字节大小,而strlen是字符串长度。下面做一个比较好玩的测试吧

       char *s="Hello world";         //这一过程是s指向字符常量"hello",其实内部实现为hello开辟了一个内存大小为5个字节的缓冲区。

      printf("%d,%d,%d",sizeof(s),sizeof(*s),strlen(s));

      char c[12]="Hello world";

       printf("%d,%d,%d\n",sizeof(c),sizeof(*c),strlen(c));

这里我就不说答案了,大家自己测试一下看答案,再想想就知道是为什么了。

posted @ 2007-10-13 23:23  枫崖  阅读(327)  评论(0编辑  收藏  举报