我知道这是一个非常基本的问题,但是在使用高级语言编写了一些项目之后,我才开始进行一些基本的C ++编程。
基本上我有三个问题:
- 为什么在普通变量上使用指针?
- 我应该在何时何地使用指针?
- 如何将指针与数组一起使用?
#1楼
在变量上使用指针的一种方法是消除所需的重复内存。 例如,如果您有一些大型的复杂对象,则可以使用指针为您所做的每个引用指向该变量。 使用变量,您需要为每个副本复制内存。
#2楼
- 在某些情况下,需要使用函数指针才能使用共享库(.DLL或.so)中的函数。 这包括跨语言执行操作,通常会提供DLL接口。
- 制作编译器
- 做科学的计算器,在哪里有函数指针的数组或向量或字符串映射?
- 尝试直接修改视频内存-制作自己的图形包
- 制作一个API!
- 数据结构-您正在制作的特殊树的节点链接指针
指针有很多原因。 如果您想保持跨语言兼容性,则在DLL中进行C名称处理尤其重要。
#3楼
这是我的助手,我不会答应成为专家,但是我发现指针在我要编写的其中一个库中很棒。 在这个库中(这是带有OpenGL的图形API :-),您可以创建一个三角形,并向其中传递顶点对象。 draw方法采用这些三角形对象,并根据我创建的顶点对象来绘制它们。 好吧,没关系。
但是,如果我更改顶点坐标怎么办? 用顶点类中的moveX()移动它还是其他东西? 好吧,好的,现在我必须更新三角形,添加更多的方法,并且浪费了性能,因为每次顶点移动时我都必须更新三角形。 仍然没什么大不了的,但这不是那么好。
现在,如果我有一个包含大量顶点和大量三角形的网格,并且该网格正在旋转,移动等等。 我将必须更新使用这些顶点的每个三角形,可能还要更新场景中的每个三角形,因为我不知道哪个三角形使用哪个顶点。 那是大量的计算机密集型工作,如果我在风景之上有多个网格物体,天哪! 我有麻烦了,因为即时更新几乎每个帧的每个三角形,因为这些顶点随时都在变化!
使用指针,您不必更新三角形。
如果每个三角形类有三个* Vertex对象,我不仅节省了空间,因为无数三角形没有三个本身很大的顶点对象,而且无论这些指针如何,它们始终将指向它们要指向的顶点顶点多久更改一次。 由于指针仍指向相同的顶点,因此三角形不会改变,并且更新过程更易于处理。 如果我对您感到困惑,我不会怀疑,我不会假装自己是专家,只是将我的两分钱投入到讨论中。
#4楼
基本思想是可以通过操纵数据的存储位置来消除语言的许多限制(例如使用数组,字符串和修改函数中的多个变量)。 为了克服这些限制,在C中引入了指针。
此外,还可以看到,在将大型数据类型(例如具有多个字段的结构)传递给函数的情况下,使用指针可以更快地运行代码并节省内存。 在传递之前复制此类数据类型将花费时间并消耗内存。 这是程序员偏爱大数据类型的指针的另一个原因。
#5楼
指针是间接引用另一个变量的一种方法。 他们没有告诉变量值 ,而是告诉您其地址 。 这在处理数组时特别有用,因为使用指向数组中第一个元素(其地址)的指针,您可以通过增加指针(指向下一个地址位置)来快速找到下一个元素。
我读过的关于指针和指针算术的最佳解释是在K&R的The C Programming Language中 。 C ++ Primer是开始学习C ++的一本好书。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3183000