我使用的编程语言是Java。我一直在向C++过渡,那里有些不稳定。“岩石-”不是在学习,而是沿着“在C++中思考”的思路。
我见过很多人说你应该先学C(技术上我已经知道了),然后我看到人们说不跳过C,直接去C++。再说一次,这不是一个“学习”问题;它是一个“思考中的”问题;我知道C++的语法,我知道C++中的OOD,等等。
例如,SDL中的这段代码我可以像我知道的那样解释它,但我不能真正地“利用”指针:
SDL_Surface* hello = NULL;我应该用C语言编程才能“习惯”这一点吗?如果我从未使用过来自Java等语言的指针,那么我应该做些什么来适应它们呢?
发布于 2010-06-28 09:37:29
我应该用C语言编程才能“习惯”这一点吗?
不,你不应该这么做。C曾经是C++的一个很好的介绍,当时C++大多被认为是"C但有类“。C++是从这种思维方式进化而来的,所以用C++编写C代码会导致非常糟糕的C++代码。
如果我从未使用过来自Java等语言的指针,那么我应该做些什么来适应它们呢?
了解如何在C++中使用指针意味着几个关键领域(您可能应该一个接一个地学习它们):
operator*和operator->来模拟对象的类似指针的行为(以及何时不滥用此行为)。constness /可变性:指针、const指针、指向const值的指针和指向const值的const指针(以及何时使用每个指针)之间的区别是什么,以及使用可变指针的类似情况。当前C++建议中禁止在代码中使用指针的最佳实践,除非它们是由代码自动管理的(例如,通过RAII )。
发布于 2010-06-28 04:51:35
的确,指针是一件大事,而C和C++也有这个概念。
但是C++不仅仅是具有对象的C。
有两本免费的书,你可以从Bruce的星球PDF下载,叫做C++中的思考 (第一卷和第二卷),这将真正帮助你获得C++的感觉。
很多C++也是工具包,无论是标准库(std)还是MFC,还是反粒几何库中的类等等。这也有区别。
如果你需要C++,那就去找C++。首先学习C就像学习西班牙语,这样你就可以学葡萄牙语,而不是仅仅瞄准葡萄牙语。
发布于 2010-06-28 05:08:36
如果你理解语法,那么要想在一种语言中“流利”,唯一的方法就是使用它。
使用C是保持简单和接近“金属”的好方法,但它与C++不一样,所以如果您希望使用C++,最终我会建议您使用C++。(也就是说,如果你想精通意大利语,就不要学拉丁语,尽管拉丁语会给你很多深刻的见解,但这两种语言是不同的野兽,所涉及的思维过程也相应不同)
一旦你“得到”它们,指针就很容易了。当使用指针时,一个非常好的主意是使用"p“前缀符号。对于每个指针(间接的级别),在变量名的前面添加一个"p“,以提醒您它是一个指针:
Vehicle vehicle = an actual vehicle
Vehicle *pVehicle = a pointer to a Vehicle
Vehicle **ppVehicle = a pointer to a pointer to a Vehicle要访问车辆,必须对每个指针取消一次引用,即:
vehicle.SetName("Ford Focus"); // Directly access an object instance
(*pVechicle).SetName("Ford Focus"); // Dereference once
(**ppVehicle).SetName("Ford Focus") // Dereference twice取消引用有三种方法(生成相同代码的不同语法):
(*pVehicle).DoSomething()
pVehicle->DoSomething()
pVehicle[0].DoSomething()当您对指针使用算术时,它们在车辆单元中操作,而不是以字节为单位操作。
pVehicle++; // Move to the next vehicle record, not just the next byte最后,对于每一个
pVehicle = new Vehicle您需要平衡您的代码和:
delete pVehicle;
pVehicle = NULL;(编辑)哦,而且几乎忘记了最重要的一个:始终在尝试使用指针之前检查指针是否有效!
if (pVehicle != NULL)
...use pVehicle我发现"p“表示法是无价的,因为您永远不会忘记某物是一个指针,而p的数目告诉您需要多少取消引用。一旦我采用了它,我就停止编写空的取消引用/访问冲突错误。
这就是你需要知道的所有关于指针的知识。现在你只需大量使用它们,就能获得流利的效果。
https://stackoverflow.com/questions/3130104
复制相似问题