我知道这是一个非常基本的问题,但在用高级语言编写了几个项目之后,我刚刚开始了一些基本的c++编程。
基本上我有三个问题:
为什么使用指针而不是普通变量? 我应该在何时何地使用指针? 如何在数组中使用指针?
我知道这是一个非常基本的问题,但在用高级语言编写了几个项目之后,我刚刚开始了一些基本的c++编程。
基本上我有三个问题:
为什么使用指针而不是普通变量? 我应该在何时何地使用指针? 如何在数组中使用指针?
当前回答
因为到处复制大对象会浪费时间和内存。
其他回答
Pointers allow you to refer to the same space in memory from multiple locations. This means that you can update memory in one location and the change can be seen from another location in your program. You will also save space by being able to share components in your data structures. You should use pointers any place where you need to obtain and pass around the address to a specific spot in memory. You can also use pointers to navigate arrays: An array is a block of contiguous memory that has been allocated with a specific type. The name of the array contains the value of the starting spot of the array. When you add 1, that takes you to the second spot. This allows you to write loops that increment a pointer that slides down the array without having an explicit counter for use in accessing the array.
下面是一个C语言的例子:
char hello[] = "hello";
char *p = hello;
while (*p)
{
*p += 1; // increase the character by one
p += 1; // move to the next spot
}
printf(hello);
打印
ifmmp
因为它取每个字符的值并加1。
这里有一个略有不同,但有深刻见解的观点,为什么C的许多特性是有意义的:http://steve.yegge.googlepages.com/tour-de-babel#C
基本上,标准的CPU体系结构是Von Neumann体系结构,在这样的机器上,能够引用内存中数据项的位置并对其进行运算是非常有用的。如果您了解汇编语言的任何变体,您将很快看到这在低级别上是多么重要。
c++让指针有点令人困惑,因为它有时会为你管理指针,并以“引用”的形式隐藏它们的效果。如果你直接使用C语言,对指针的需求就更加明显了:没有其他方法可以实现引用调用,它是存储字符串的最佳方式,是迭代数组的最佳方式,等等。
因为到处复制大对象会浪费时间和内存。
指针是获得对另一个变量的间接引用的一种方式。它们不是保存变量的值,而是告诉您变量的地址。这在处理数组时特别有用,因为使用指向数组中第一个元素(它的地址)的指针,可以通过递增指针(指向下一个地址位置)快速找到下一个元素。
我读过的关于指针和指针算术的最好解释是在K & R的《C编程语言》中。开始学习c++的一本好书是c++ Primer。
指针的一种用途(我不会提及在其他人的文章中已经介绍过的内容)是访问未分配的内存。这对于PC编程来说没什么用,但是在嵌入式编程中用于访问内存映射的硬件设备。
在DOS的旧时代,你可以通过声明一个指针直接访问显卡的显存:
unsigned char *pVideoMemory = (unsigned char *)0xA0000000;
许多嵌入式设备仍然使用这种技术。