我知道这是一个非常基本的问题,但在用高级语言编写了几个项目之后,我刚刚开始了一些基本的c++编程。
基本上我有三个问题:
为什么使用指针而不是普通变量? 我应该在何时何地使用指针? 如何在数组中使用指针?
我知道这是一个非常基本的问题,但在用高级语言编写了几个项目之后,我刚刚开始了一些基本的c++编程。
基本上我有三个问题:
为什么使用指针而不是普通变量? 我应该在何时何地使用指针? 如何在数组中使用指针?
当前回答
指针的一种用途(我不会提及在其他人的文章中已经介绍过的内容)是访问未分配的内存。这对于PC编程来说没什么用,但是在嵌入式编程中用于访问内存映射的硬件设备。
在DOS的旧时代,你可以通过声明一个指针直接访问显卡的显存:
unsigned char *pVideoMemory = (unsigned char *)0xA0000000;
许多嵌入式设备仍然使用这种技术。
其他回答
指针的一种用途(我不会提及在其他人的文章中已经介绍过的内容)是访问未分配的内存。这对于PC编程来说没什么用,但是在嵌入式编程中用于访问内存映射的硬件设备。
在DOS的旧时代,你可以通过声明一个指针直接访问显卡的显存:
unsigned char *pVideoMemory = (unsigned char *)0xA0000000;
许多嵌入式设备仍然使用这种技术。
指针是获得对另一个变量的间接引用的一种方式。它们不是保存变量的值,而是告诉您变量的地址。这在处理数组时特别有用,因为使用指向数组中第一个元素(它的地址)的指针,可以通过递增指针(指向下一个地址位置)快速找到下一个元素。
我读过的关于指针和指针算术的最好解释是在K & R的《C编程语言》中。开始学习c++的一本好书是c++ Primer。
在java和c#中,所有的对象引用都是指针,而在c++中,你可以更好地控制指针指向的地方。记住,能力越大,责任越大。
在很大程度上,指针是数组(在C/ c++中)——它们是内存中的地址,如果需要(在“正常”情况下),可以像数组一样访问它们。
因为它们是一个项目的地址,所以它们很小:它们只占用一个地址的空间。由于它们很小,将它们发送到函数是很便宜的。然后它们允许该函数在实际项目上工作,而不是一个副本。
如果您想进行动态存储分配(例如对于链表),则必须使用指针,因为它们是从堆中获取内存的唯一方法。
使用指针而不是变量的一种方法是消除所需的重复内存。例如,如果您有某个大型复杂对象,您可以使用指针为您所做的每次引用指向该变量。对于变量,您需要为每个副本复制内存。