邪恶八进制信息安全团队技术讨论组's Archiver

无锋之刃 2005-2-24 11:56

[原创]邪恶八进制短期C培训教材《说C》(第一部分)

文章作者:无锋之刃[E.S.T顾问团]
信息来源:邪恶八进制 中国

章1     C的初体验
节1.1     第一次亲密接触
    95年的时候我刚上初二,学习并不太紧,课余的闲暇时间很多。为了打发掉一些时光,经常会跑去书城买点计算机类的书来啃。也许是命中注定,我买本谭老前辈的《TC程序设计教程》,至此成为地地道道的Cer。而我的C体验,也是从此开始的。
    谭老的书写得实在是四平八稳,滴水不漏,有章有法(最难得的是十数年不变,当工具书用可以,当读物不行)。那时候我的知识结构还很简单,本来这样的书是决计看不懂的。但初一的时候恶补过一阵子BASIC,再加上莫大的好奇心,居然愣是在七天内把整本书给啃完了。有人会说吹牛也不用这样,但我真正想要表达的观点是,一周内看完一门编程语言的语法的确不难,问题是能看懂多少?
    很多人在与C进行第一次亲密接触的时候,大都会被C的简洁与强大所折服,也大都会想要努力把C学习好。可是真正把C搞明白(只是明白,不算熟悉的)的人太少了。原因在于C的语法容易看,想搞懂却不是那么简单的。特别是指针,更是百转千回,把人绕晕了也不见分析得清楚。
    孔老人家曰“学而不思则惘,思而不学则殆”,很有道理。所以我看计算机书籍的方法与别人不太一样,喜欢把自己假设成计算机,按计算机的思路去思考问题。这就是我看C又快又明白的原因。除了花时间在“看”上面,还会根据代码的结构,在脑子“想”这些代码的意思(语义)是什么?相互关系如何?编译器如何会处理这些代码?等等等等。通过把自己代换成编译器,从而把学和思结合,就能顺利地弄清楚上面的各种问题。虽然有点奇怪,但真的有效,呵呵。
    学和思结合固然重要,更关键的问题在于多动手练习。看完不代表懂,懂不代表会用,会用不代表熟练,熟练不代表能赚钱。所以学习C的初级阶段,主要还是通过动手编码来熟悉语法,洞悉语义,达到看一能及二甚至推三的程度,才算小成。多数C学习者过于重视看书,却忽略了练习,实在是大大的不该。
    练习的方法也不应该是死做书上的习题。习题的目的是帮助学习者巩固语法知识,便于其熟练使用而已。学习者做完了习题最多是懂得怎么用语法,但还没有到懂得何时用什么语法的程度。要想达到自由地编程,或者是下意识地编程的程度,必须是分析实际的功能需求,仿照已有的程序来编码才可达成。比方说一个菜单,看的人大概就是会用,但程序员应该从编程的角度去看这个菜单。有目的地思考“我如何实现这个菜单的功能”之类实际问题,更能锻炼出真正的编程能力,而不是简单地应试。换句话说,就是先懂得分析,然后才懂得设计,最后是懂得编码。编码人人都能懂,但分析设计却不是个个都会的。这也可算是编程爱好者与程序员的本质区别了吧。

节1.2    学习顺序简论
我的学习顺序,比较喜欢安排成这样:
1.    先看一遍语法;
2.    用语法把想实现的软件功能实现出来;
3.    回头再看一遍语法;
4.    考虑此语法上的高层结构,比如建模。
  看第一遍语法,主要是为了熟悉语法结构、语言要素等等基本知识。学习过其它语言的人可以在这个阶段进行语法比较。第二步则是练习阶段,主要是巩固语法的使用。而看第二遍语法是复习语法,补充细节,把没有来得及看或者尚未理解的细节知识纳入知识结构之中。最后一个阶段就进入到高层面进行抽象,即如何使用此语言来对问题建模。
  这个顺序的前提假设是读者已经具备一定的语言基础。如果是初学者,那么可以在第一步中加入习题练习,即语法学习与实践练习交叉进行,但花费时间比较多。但初学者容易在这个比较漫长(甚至反复)的过程中失去信心,这就需要初学者具备一定的心理素质了。C语言不难学,难的是人的心:)。
  当然这个顺序不单只是应用在C语言的学习上,也可以应用在其它方面。其实顺序不是问题,最关键的是要有信心、恒心和耐心。

1.3    经典C代码
   几乎每本C教程的第一个代码片段都类似下面的代码(可以在任何C编译器上编译通过,如果不能的话,把你的编译器扔了:):
#include <stdio.h>

int main(int argc, char **argv)
{
    printf(“hello world!\n”);
    return 0;
}

   很简单的代码段,但已经蕴涵了不少C的语法结构。只是大家都已经司空见惯,没什么感觉而已了。其实仔细看看,还是有点分析的味头。
首先应该看出的是C语言采用的“头文件/实现文件”结构。其中头文件存放预处理指令(preprocess instruction)、声明(declaration)、枚举/结构/联合定义(enumerator/structure/union definition)、内联函数定义(inline function definition)、类型定义(type definition)等公共的、可以重复包含的内容;实现文件存放预处理指令、静态/全局变量定义(static/global variable definition)、函数定义(function definition)等不可重复包含的内容。 不同的代码开放层次可以开放不同的代码文件(比如在分放代码时可以只提供头文件和Lib文件,而开源时则可以再附加上实现文件)。
   其次应该注意的是main函数。正如进入一个单位办事必须先从大门进入一样,C程序中的逻辑入口点是main函数。此函数的作用有三个。第一个是为操作系统向程序提供的参数保留占位符;第二个则是程序向操作系统提供的返回状态保留占位符;最后一个是为操作系统替开辟此程序的新进程提供进入点。每个C工程都必须有唯一一个main函数(保存在某个实现文件中)。
很多人不太在意main函数的写法,经常写成如下形式:
void main()
其实这是不对的,因为这不是标准C中规定的写法,因此是不可移植的。以下两种形式才是具备移植能力的标准写法:
int main();
int main(int argc, char **argv);
   最后值得注意的是C语言的“按功能分离代码形成模块”的设计原则。使用此原则可以较好地组织代码,形成良性结构。比如将所有标准的输入/输出代码写入不同的实现文件中,再由一个统一、包含了所有输入/输出函数原型的头文件来对外提供访问信息。读者应该严格按这个原则来进行模块划分和代码编写。
   以上就是我们可以从极小化的经典C代码中看出的一些东西。不过每一个东西都足够让我们研究好长一段时间了(主要是“意会”的时间太长了:()。Let us go!

dahubaobao 2005-2-24 21:11

如果拿谭老头的书和《C Primer Plus》比的话  一天一地!

落叶树 2005-2-24 22:08

楼上所说的是不能相比较di,潭浩强老师的书开篇有说明-----目的是为了普及计算机教育而不是深入研究..

无锋之刃 2005-2-25 08:36

节1.2    学习顺序简论
我的学习顺序,比较喜欢安排成这样:
1.    先看一遍语法;
2.    用语法把想实现的软件功能实现出来;
3.    回头再看一遍语法;
4.    考虑此语法上的高层结构,比如建模。
   看第一遍语法,主要是为了熟悉语法结构、语言要素等等基本知识。学习过其它语言的人可以在这个阶段进行语法比较。第二步则是练习阶段,主要是巩固语法的使用。而看第二遍语法是复习语法,补充细节,把没有来得及看或者尚未理解的细节知识纳入知识结构之中。最后一个阶段就进入到高层面进行抽象,即如何使用此语言来对问题建模。
   这个顺序的前提假设是读者已经具备一定的语言基础。如果是初学者,那么可以在第一步中加入习题练习,即语法学习与实践练习交叉进行,但花费时间比较多。但初学者容易在这个比较漫长(甚至反复)的过程中失去信心,这就需要初学者具备一定的心理素质了。C语言不难学,难的是人的心:)。
   当然这个顺序不单只是应用在C语言的学习上,也可以应用在其它方面。其实顺序不是问题,最关键的是要有信心、恒心和耐心。

白色猎人 2005-2-25 09:04

语法看了n遍了,不过要自己用c来写个什么小程序真的是比较难哦。希望无锋大哥能继续写下去,最好能写点简单实用的小程序来分析分析。

无锋之刃 2005-2-25 10:12

1.3    经典C代码
    几乎每本C教程的第一个代码片段都类似下面的代码(可以在任何C编译器上编译通过,如果不能的话,把你的编译器扔了:):
#include <stdio.h>

int main(int argc, char **argv)
{
    printf(“hello world!\n”);
    return 0;
}

    很简单的代码段,但已经蕴涵了不少C的语法结构。只是大家都已经司空见惯,没什么感觉而已了。其实仔细看看,还是有点分析的味头。
首先应该看出的是C语言采用的“头文件/实现文件”结构。其中头文件存放预处理指令(preprocess instruction)、声明(declaration)、枚举/结构/联合定义(enumerator/structure/union definition)、内联函数定义(inline function definition)、类型定义(type definition)等公共的、可以重复包含的内容;实现文件存放预处理指令、静态/全局变量定义(static/global variable definition)、函数定义(function definition)等不可重复包含的内容。 不同的代码开放层次可以开放不同的代码文件(比如在分放代码时可以只提供头文件和Lib文件,而开源时则可以再附加上实现文件)。
    其次应该注意的是main函数。正如进入一个单位办事必须先从大门进入一样,C程序中的逻辑入口点是main函数。此函数的作用有三个。第一个是为操作系统向程序提供的参数保留占位符;第二个则是程序向操作系统提供的返回状态保留占位符;最后一个是为操作系统替开辟此程序的新进程提供进入点。每个C工程都必须有唯一一个main函数(保存在某个实现文件中)。
很多人不太在意main函数的写法,经常写成如下形式:
void main()
其实这是不对的,因为这不是标准C中规定的写法,因此是不可移植的。以下两种形式才是具备移植能力的标准写法:
int main();
int main(int argc, char **argv);
    最后值得注意的是C语言的“按功能分离代码形成模块”的设计原则。使用此原则可以较好地组织代码,形成良性结构。比如将所有标准的输入/输出代码写入不同的实现文件中,再由一个统一、包含了所有输入/输出函数原型的头文件来对外提供访问信息。读者应该严格按这个原则来进行模块划分和代码编写。
    以上就是我们可以从极小化的经典C代码中看出的一些东西。不过每一个东西都足够让我们研究好长一段时间了(主要是“意会”的时间太长了:()。Let us go!

无锋之刃 2005-2-25 14:25

2     雄关漫道从头越
2.1     小是小非的问题
2.1.1     常量与变量
      编程中用得最多的,大概就是常量和变量了。
*常量
      通常常量分两个层次,即物理存储的常量与逻辑常量。物理层面(特指RAM中)的常量并不存在,因为RAM本身就是可读可写的,并没有什么物理机制可以限定RAM中某区域的读写权限。所以存储在RAM中的常量实质是个变量。那为什么称其为常量呢?
      一般教程中叙述的常量指的都是逻辑常量,即在逻辑上,此量值是不可改变的。由于RAM中不存在完全的常量,因此程序中的常量是由编译器用变量加上逻辑规则限定而仿真出来的。如下所示:
          const int i = 0; /* 实质是个变量 */
          i = 1;  /* 哈,编译器知道你“想在逻辑上改变常量值”的意图,不会让你通过的 */
      编译器会在逻辑层面严格禁止程序员修改常量的值。但是常量的物理存在是变量,所以我们可以这么干:
          int *a = (int *)&i;  /* 强制转换地址的类型 */
          *a = 5;  /* 哈,编译器怎么办? */
      任何编译器都应该允许以上代码通过编译(因为语法上完全正确),不过好的编译器更应该给出一个warning(因为语义上有错):间接修改常量的值可能会导致错误。程序员不应该写出这样的代码,这根本就是搬石头砸自己的脚。常量就是不可修改的量值,在逻辑上必须完全遵循这一规则。
      从表示的方式来看,可以将常量分成两类:存储常量与字面常量(literal constant)。存储常量就是上面说的以变量仿真出来、以二进制形式保存的常量。字面常量则是直接保存在代码中的、以文字形式表现出来的常量。比如:
           const int b = 0;    /* 0就是一个字面常量 */
           char *str = “test!”;  /* 以引号定界的字符串也是字面常量 */
      在编辑期,字面常量常常被修改。而在编译期时字面常量会被编译器转换成二进制值保存在二进制代码区或者全局数据区中。
*变量
      变量没什么可说的。变量名起双重作用:作为变量的标识符,作为变量地址的占位符。说白了就是标识人脑比较难于记忆的地址值,然后在代码中为它占个位置。在编辑期看到的所有变量名到了编译期通通会被编译器替换成恰当的地址值(直接值或者是EBX[]这样的寻址方式),感兴趣的读者可以反汇编C代码来看看。

风泽 2005-3-21 23:44

我就喜欢用void xxx()  看来以后要改一改~~又学到点知识~~~顶~~

尘土飞扬 2005-3-24 14:43

楼主能在七天内不管懂多少啃完C,应该和恶补过QB有很多的关系,要不估计咬不大动

我QB只是N年前翻过一半,这几天晚上在看C,结果只看了20多页就被整的睡过去了......

无锋之刃 2005-3-25 08:00

语言是枯燥的。如何在枯燥中寻找乐趣,是学习推动力的来源:)

孔子云:学而不思则惘。
我说:惘极而困之。

意识 2005-3-28 06:51

const int i = 0; /* 实质是个变量 */


const 是C的关键字吗???

独孤加倍 2005-4-11 17:37

C++是对C的扩充,我太想学好C了,但是学到了指针就如楼上所说的一样,老弄的晕忽忽的
有的时候就连循环也会把我弄蒙。在自己晕的时候真的很闹心,直接影响情绪。

qq66565841 2006-8-21 03:40

我前GF给我寄来一本潭浩强的《C++程序设计》, [s:57] 都看了半年了还是不咋地,关键是高考太紧张没时间看,这下好了,解放了,抽空看完它,看不懂也撑着眼皮子看,最多的一次看了30页,那个瞌睡劲儿大家应该都有体会 [s:75]

zrqfzr 2006-8-22 08:38

幸好我没看国潭浩强的C/C++教程,本人觉得《C++ Primer Plus 》这本书就非常不错,适合初学者也适合有一定基础的人看!

rosesky 2006-8-23 16:58

大家觉得是C好点还是delphi强点啊?自己不知道学习哪中语言~~请大家说说自己的看法.

残冰雨落 2006-8-24 00:47

可以更加详细么?.

int main(int argc, char **argv)
//为什么可以用void和int..两者有什么区别?..
//括号中间的char 是申明字符行的**argv?..星号又是什么意思哦?

zrqfzr 2006-8-29 23:15

[quote][b]这里是引用第[/b][color=#ff0000][19 楼][/color][b]的[color=#000066]onepiece[/color]于[/b]2006-08-26 23:46[b]发表的:[/b]
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
是不是说C语言是所有语言的基础一定要吖的好呢,我是新手所有不太明白 [s:46][/quote]

不是说C语言是所有语言的基础
但是
要对系统作深入研究
就离不开C语言了

fhdone 2006-9-3 17:55

初学编程可以看看VB,再学C,这样更容易理解

pc逍遥鼠 2006-9-3 20:49

我感觉我买的<<C++入门经典>>这个不错,因为它是一章一章的讲!!!很详细!!!呵呵!看完了,把他当作查询的书也可以!!!

keri 2006-9-5 14:10

希望再次发这样经典的帖子(个人觉得经典)

dd_hack 2006-9-11 09:32

我学习了2年  困了2年。。。结果C语言只有38分。。挂掉。。。至今毕业证无奈的和我无缘。。。

上帝的肛门 2006-9-13 13:45

我是借别人的书来看
总的来说
枯燥
delphi就不一样
感觉,用他写出来的东西挺"高贵"
vb当然简单了,从各大黑客站上发布的某某某记事本,黑客专用记事本,无非多了几个文本控件.汗.

guangqiya 2006-9-14 22:47

困的感觉,确实很让人郁闷。
谭的C我买过两次,是同一本,而且都是在地摊上,但都没看完,看到指针就晕乎了。

icy_cold 2006-9-16 15:15

那是叫项目牵着鼻子走学的比较快..做个小游戏,小工具什么的 回头再找书
这样比较有效果

evilknight 2006-9-17 16:20

int main(int argc, char **argv)
//为什么可以用void和int..两者有什么区别?..
//括号中间的char 是申明字符行的**argv?..星号又是什么意思哦?
C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。

char **argv 等于char argv[][].你可以看下相关的C的书..里面都会说细介绍的...

evilknight 2006-9-17 16:35

命令行参数C primer plus第五版有介绍...,如果我没有记错的话是312页..

const int i = 0; /* 实质是个变量 */
const 是C的关键字吗???

const是一个C语言的关键字,它限定一个变量不允许被改变。

kiki 2006-9-17 17:14

[quote][b]这里是引用第[/b][color=#ff0000][30 楼][/color][b]的[color=#000066]evilknight[/color]于[/b]2006-09-17 16:35[b]发表的:[/b]
命令行参数C primer plus第五版有介绍...,如果我没有记错的话是312页..

const int i = 0; /* 实质是个变量 */
const 是C的关键字吗???

.......[/quote]
在c中const 的功能类似于#define

[code]
#include <stdio.h>
int main(void)
{
  const int i = 0;
  int * pi = (int*)&i;
  *pi = 1;
  printf("0x%.8x:%d\n", &i, i);//这里编译器改为printf("0x%.8x:%d\n", &i, 0)
  printf("0x%.8x:%d\n", pi, *pi);
  return 0;
}
[/code]

白白逍遥 2006-9-17 20:04

你这个c啊,写的不是很好,我学c学了一年多了,见过很多的东西。看语法会看晕人的,还是要从重点来看,c是一个面向过程的语言,不想c++等面向对象的语言 ,这一点一定要记住,do you understrand

→入侵者╄ 2006-9-18 13:22

偶是经常看看一两页就睡着了 第二天又是不知不觉中看头一天看过的  很郁闷

evilknight 2006-9-18 14:31

#define 是预处理命令。只是做置换,不做任何检测..所以建议大家尽量用const替代#define
const 有类型之分,比如const int,const char....等..
而且在C中..不能用变量定义数组.C++可以...
#define M 10
const int N = 10;
int a[M]; //ok.
int a[N]; //error.

andelf 2006-9-20 18:28

[quote][b]这里是引用第[/b][color=#ff0000][17 楼][/color][b]的[color=#000066]残冰雨落[/color]于[/b]2006-08-24 00:47[b]发表的:[/b]
可以更加详细么?.

int main(int argc, char **argv)
//为什么可以用void和int..两者有什么区别?..
//括号中间的char 是申明字符行的**argv?..星号又是什么意思哦?[/quote]

int代表函数返回值为整数,一般来说,如果程序执行没有错误就会返回0
上边说过void main()是不合规则的写法,就是代表函数不接受任何参数,
记得还可以写做 int main(void)

另外main()函数中可以省略return 0; 其他函数是不可以的

裤子 2006-9-30 21:33

谢谢.自学C 是用谭浩强的C程序设计.
也是按它说的 void main()
现在看到了无锋前辈教的指导 该改改了
void main()
其实这是不对的,因为这不是标准C中规定的写法,因此是不可移植的。以下两种形式才是具备移植能力的标准写法:
int main();
int main(int argc, char **argv);

∑午夜忍者 2006-9-30 22:08

[quote][b]这里是引用第[/b][color=#ff0000][17 楼][/color][b]的[color=#000066]残冰雨落[/color]于[/b]2006-08-24 00:47[b]发表的:[/b]
可以更加详细么?.

int main(int argc, char **argv)
//为什么可以用void和int..两者有什么区别?..
//括号中间的char 是申明字符行的**argv?..星号又是什么意思哦?[/quote]

先举手报名学习...以前学过,没学好!

void应该是没有返回值,那么一个Main也就只是一个过程而已,基本上,一个合理的程序应该要一个返回值的.并且,即使return 0也是个好习惯!
而**argv,以后一起好好学好指针吧,应该是指向指针的指针类型,哎,晕了!
拙见.提供一个思考的角度!希望没有误导.呵呵!

cnhcerkf 2006-10-1 12:46

似乎好久没有更新了:(
[s:73]
偶是菜鸟,偶也给大家加个料:)大牛们别嫌弃偶占用空间 [s:79]
这个是网上流传的《C++从零开始》,偶在邪恶一直没有看到过,可能大家都是牛淫不愿意看低级的吧。。

evilknight 2006-10-1 13:33

C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C.( void main( ) 从来就不存在于 C++ 或者 C )。

操作系统通过main的返回值来判断程序是否正常结束...

*代表指针

zyg9999 2006-10-14 19:18

谭老的书却是 不错
以后还去图书馆看 嘿嘿

hackest 2006-10-19 01:52

老谭的C我看几遍的了,现在只能用来写一些简单到不能再简单的程序,计算器这种呢…… [s:79]

libin 2006-10-19 14:32

C呀~  学是学了  门也入了 就是没办法向里走 ,根本就找不到路 烦呀~
  找过很多书 但是从想从入门过度到能够编写基本的程序 好困难 [s:88]

sunray 2006-10-19 15:08

[s:70]  潭浩强的比较深入浅出,容易上手和入门,建议哪为去搞个电子版来

好象TC也升级了

我就是sb 2006-10-30 21:52

[s:35] 现在搞网络管理,管着管着又得编程了,回头学吧。。谭老的书没买,以前同学扔给了我一本,看到后面就迷糊

yanchengwen 2006-11-13 22:00

潭浩强的C语言电子版,我到是有一本,只是我刚来这还不熟悉,看看一会该上传到哪里

loveboyyu 2006-11-15 05:32

我也是C语言学习者。。但是我现在学到算法那一章节 就学不下去了。。哎。。比叫难啊。。还有函数 等等。。需要结合高等数学啊。。我没那么高的文化。呵呵  [s:35]

ouqi 2006-11-15 13:46

对于变成语言,我比较熟练的就是vb,c和c++以及c#都不太熟悉。

van 2006-11-21 16:41

[quote][b]引用第49楼[i]zyy1517[/i]于[i]2006-11-15 22:04[/i]发表的[/b]:
C++ Primer Plus  学习它还需要什么基础吗~~我什么都不会的~~[/quote]

直接看。即使你什么也不会。

不过作者口水好多。

guhan010 2006-11-24 13:33

还好我只会用C/C++,看了vb,DELPHI的程序,好长,好多的字符,乱乱的。
c就不会啊,语句看上去简单,起码变量名字没那么多麻烦。但现在做VC,变量又长了,唉,烦死了。
学c最好来到unix下,因为,这里更好体现了c下面的那些定义什么的,没有很多特殊的创意。
都是有理可据的。

chk 2007-3-2 03:16

晕啊,

        #include <stdio.h>

int main(int argc, char **argv)
{
  printf(“hello world!\n”);
  return 0;
}



为什么这段代码 偶在turboc了里一执行就错误,偶还以为是自己的操作问题 , 多试了几次都一样,于是在WINTC里编译还是一样,错误信息是这样显示的,
错误 noname.c 5: 非法字符 &#39;? (0xa1)在 main 函数中
错误 noname.c 5: 非法字符 &#39;? (0xb0)在 main 函数中
错误 noname.c 5: 未定义的符号&#39;hello&#39;在 main 函数中
错误 noname.c 5: 函数调用缺少 &#39;)&#39;在 main 函数中
错误 noname.c 5: 非法字符 &#39;\&#39; (0x5c)在 main 函数中
错误 noname.c 5: 非法字符 &#39;? (0xa1)在 main 函数中
错误 noname.c 5: 非法字符 &#39;? (0xb1)在 main 函数中
警告 noname.c 7: 参数&#39;argv&#39;从未使用在 main 函数中
警告 noname.c 7: 参数&#39;argc&#39;从未使用在 main 函数中
***  编译出现 7 个错误  ***
      可用内存  399890     

很不理解为什么会这样,偶是新手 刚刚开始学C的,还望多多请教......

chk 2007-3-2 03:20

而且偶也发现了,偶经常在网上复制一段非常高深的什么shellcode,当然是完整的了,保证一个字符都不少,满怀激动的心情去编译时 总是遇到这样的情况,大小和多少不计,几乎大部分都是这样,错误 noname.c 5: 非法字符 &#39;? (0xa1)在 main 函数中  之类的,郁闷。。。。。

easycat 2007-3-8 15:03

谭老那本书其实还是不错的。只是必须自己去看,如果有老师讲解,那本书就没法看了。

EvilOctal 2007-3-8 15:09

[quote]引用第51楼chk于2007-03-02 03:16发表的 :
晕啊,

      #include <stdio.h>

int main(int argc, char **argv)
.......[/quote]
正确的:
[code]#include <stdio.h>

int main(int argc, char **argv)
{
printf("hello world!\n");
return 0;
}[/code]
一定要用英文字符半角符号来编写程序部分。
我修改了这一句
[code]printf("hello world!\n");[/code]
您可以自己看看我修改了什么地方。
引号。:)

nixilin 2007-3-23 17:12

[quote]引用第3楼冰血封情于2005-02-25 00:15发表的 :
教的是一种毒害广大人民群众的学习方法 看他的书 困[/quote]


我不仅仅是看潭浩强的书才觉得困.[s:268]

原先我看了一本C++语言程序设计,也是弄得云里雾里.

页: [1] 2
© 1999-2008 EvilOctal Security Team