我是一名网络编码员:我目前喜欢AS3并处理PHP.我拥有一台任天堂DS,并希望给予一个去.
从更高的层面来看,什么基本的东西/生物的舒适将会失踪?我找不到[for ... in]循环,所以我认为它们不在那里.看起来我将不得不虔诚地声明事物,并且我假设我没有对象(我刚才用PHP处理过).
哈希表?有趣的数据类型?
总结一下,你基本上会得到:
键入的变量
功能
指针
标准库
然后,你做了其余的 - 这可能有点过于简化,但这是一个大概的面对的问题.
一开始可能令人生畏,可能需要克服学习曲线.这可能是您遇到的一些减速带:
串?什么字符串?
习惯的一件大事就是字符串.string
C中没有这样的东西.字符串是" null
终止字符数组"(有时称为C字符串),它基本上是指一个类型数组,char
最后一个元素是\0
(char
值0
).
在内存中,char
长度为4 的数组Hi!
将显示为:
char[0] == 'H' char[1] == 'i' char[2] == '!' char[3] == '\0'
此外,字符串不知道它们自己的长度(在C中没有"免费"的"对象"),因此需要使用标准库调用strlen
,这或多或少是一个for
遍历字符串的循环,直到它击中了一个\0
角色.(这意味着它是一个O(N)操作 - 字符串越长,查找长度所需的时间越长,这与string
现代语言中大多数实现的O(1)操作不同.)
垃圾收集?
在C中没有这样的垃圾收集器.事实上,你需要自己分配和释放内存:
/* Allocate enough memory for array of 10 int values. */ int* array_of_ints = malloc(sizeof(int) * 10); /* Done with the array? Don't forget to free the memory! */ free(array_of_ints);
分配内存后无法清理可能会导致称为内存泄漏的事情,我相信您之前已经听说过.
指针!
和往常一样,当我们谈论C时,我们不能忘记指针.引用变量和解引用指针的整个概念可能是一个严重的令人头疼的概念,但是一旦你掌握了它,它实际上并不是太糟糕.
除了你期望它以某种方式工作的时候,但是你发现你并没有很好地理解指针,它实际上做了别的事 - 就像他们说的那样,在那里完成了.
哦,指针可能是你第一次真正看到一个程序崩溃到足以让操作系统对你大喊大叫的事情之一.一个分割故障是不是电脑喜欢了很多.
类型
C中的所有变量都有类型.C是一种静态类型语言,这意味着将在编译时检查变量类型.这可能需要一些人在开始时习惯,但也可以看作是一件好事,因为它可以减少运行时错误,例如在尝试为字符串分配数字时输入类型错误.
但是,可以执行类型转换,因此可以将int
类型(它们是整数值)转换为double
类型(浮动类型值).但是,不可能尝试int
直接转换为类似的字符串char*
.
因此,例如,在某些语言中允许以下内容:
// Example of a very weakly-typed pseudolanguage with implicit typecasts: number n = 42 string s = "answer: " string result = s + n // Result: "answer: 42"
在C中,必须调用一个itoa
函数来获取一个char*
表示int
,然后strcat
用来连接两个字符串.
结论
那些事情说,学习C语言来自更高的语言可能会让人大开眼界,并且可能很难开始,但是一旦你掌握了它,它就会很有趣.
我建议开始尝试使用C编译器,并有一本好书或参考书.
我想很多人会推荐K&R书,这本书确实是一本很好的书.
起初,我并不认为推荐K&R作为第一本C书是一个好主意,因为它可能有点困难,但第二个想法,我认为这是一本非常全面和写得很好的书.如果您已经拥有一些编程经验,那么可以很好地进入C语言.
祝好运!
嗯......你可能会受到一些文化冲击.这些是C中的32个标准关键字,包括基本类型.
C的标准库功能非常强大(比人们预期的要多),但与高级语言相比,它非常薄.看不到哈希表,你可以假设C没有对象的语法或语义支持.
无论如何都可以编写漂亮的面向对象的代码,但是你必须跳过几个环节,并且手动做更多,因为语言对你没用.例如,参见GTK + UI工具包,以获得精心设计的面向对象的C库/ API的示例.