My answers on yahoo!

Sunday, 14. January 2007, 14:58:40


今天闲来无事,索性去yahoo上回答问题去了。我的解答如下:

编程入门是学C语言好,还是C++?或者别的?

都不好!
C不适合作入门语言,原因如下:

· 编程新手最需要了解的是编程的概念和对编程的基本认识,而过多的接触C语言往往会把你引出这一目的,会让你把注意力集中到一些奇怪的语言特性上,而不是编程语言本身。

· 编程新手往往对计算机了解不够深刻,不清楚计算机的内部结构,而C语言恰恰就是和计算机内存/编码/CPU打交道,最起码,调试那些“隐晦”的错误时如此。(想想你是不是没有把一个指向指针的指针的指针指向正确的位置。)

· 学好C语言需要下很大的功夫,最起码不能低于两年。(当然如果你不打算学好那得另说了。)

而C++被奉最难的计算机语言,因为它很大,你不可能一次就把它学完(实际上三次也不够)。

入门语言不妨试一下Python,它比Java还要简单。当然了,Java也可以。

C中char *a[8]所占储存空间字节数为什么是32不是8?

char a[8]才是字符数组,里面的元素都是char类型,所以大小应该是sizeof(char)8=8
而你说的char
a[8]是字符指针数组,里面的元素是指向char的指针,所以大小是sizeof(char)8。这个结果在32位机器上是32,在64位机器上是64。

什么叫堆?堆和栈有什么区别?和堆栈有什么区别?

在计算机科学中,堆(heap)这个词至少有两个意思。在数据结构中,它是一种二叉树,便于排序,便于建立优先队列。在操作系统中,它是内存的一个区域,用来存放全局变量和malloc分配的空间,一般是由低地址向高地址生长。

而栈(stack)也有两个意思。在数据结构中,栈就是所有先进后出(FILO)的结构,栈和递归密切相关。而栈的另一个意思和上面堆的第二个意思相对应,它也是内存的一个区域,一般是从高地址向低地址生长,用来存放函数的局部变量和函数调用时保存的一些内容。

二维以上的数组是不是特殊的广义表?一维数组和线性表,广义表有什么关系???

二维数组应该也是一种广义表,你可以把它当成“表的表”,二维以上的类似。广义表是数组上面的一种抽象,数组只是它的一个特例。

FIFO缓冲区是什么意思?

FIFO缓冲区是一种先进先出的环行缓冲区,在Linux内核中使用了此数据结构,用于免锁的生产者/消费者任务。在这个算法中,一个生产者将数据放入数组的结尾,而消费者从数组的另一端移走数据。具体实现请参见Linux内核源代码中的include/linux/kfifo.h。