指针数组堆栈的实现 我从java到C++,我仍然很难让我的头脑知道指针如何工作。希望你们中的一些C++程序员能帮我解决问题!p>

指针数组堆栈的实现 我从java到C++,我仍然很难让我的头脑知道指针如何工作。希望你们中的一些C++程序员能帮我解决问题!p>,c++,arrays,pointers,stack,implementation,C++,Arrays,Pointers,Stack,Implementation,在类中,我们使用动态数组创建了堆栈和队列实现 我的老师使用指针在堆上创建这些数组 int* data = new int[25]; 我不明白的是,如何用“data[top]”将值插入数组?我以为指针只是保存了内存地址?我想问我的老师这是怎么回事,但我现在时间紧迫,她要到明天下午才能给我回电。>一种看它的方法是数据[top]与*(数据+top)相同。因此,取指针data,将值top加到它上面(乘以int的大小),然后读取或写入该位置。请参阅: 您是对的,指针只保存内存中实际找到数据的点的地址。您

在类中,我们使用动态数组创建了堆栈和队列实现

我的老师使用指针在堆上创建这些数组

int* data = new int[25];

我不明白的是,如何用“data[top]”将值插入数组?我以为指针只是保存了内存地址?我想问我的老师这是怎么回事,但我现在时间紧迫,她要到明天下午才能给我回电。>一种看它的方法是
数据[top]
*(数据+top)
相同。因此,取指针
data
,将值
top
加到它上面(乘以int的大小),然后读取或写入该位置。

请参阅:

您是对的,指针只保存内存中实际找到数据的点的地址。您正在创建的堆栈只是一个类,它提供了从数组获取内存和向数组添加内存的特定方法

另外,请查看:

这应该澄清堆栈是如何工作的

我以为指针只是保存了内存地址

是的,但是你可以用这个内存地址做一些事情。特别是C++允许一种叫做指针运算的东西,它允许你使用一个内存地址来获得相对于你已经拥有地址的内存的其他内存地址。例如,如果你有一个内存地址,你可以得到紧随其后的内存地址

(正方形是内存位置)


因此,数组是一系列内存位置。要访问数组中的任何元素,只需获取已有的地址,计算要访问的元素的地址,然后使用新地址

int *A = new int[10];
int *X = A + 5; // get the address of the memory five locations past where A points to
*X = 999;
您不必将计算的地址存储在变量中:

int *A = new int[10];
*(A+5) = 999;
C++提供了语法
*(a+5)
的简写,这是数组索引运算符:

int *A = new int[10];
A[5] = 999;
5[A] = 999;
有趣的是,数组索引操作符实际上只是这个
*(A+5)
表达式的简写。由于可以翻转操作数并执行
*(5+A)
操作,因此可以使用数组索引运算符执行相同操作:

int *A = new int[10];
A[5] = 999;
5[A] = 999;
但是你不应该这样做,因为它不太可读


关于指针还有一件事需要知道:Java有指针。当你这样做的时候

String s = new String();
在Java
s
中,是指针。java只是试图隐藏这个事实,同时它需要比C++更大程度地使用指针。java没有指针运算,你不必手动去引用java中的指针,就像C++中的那样。但请考虑:

List<String> l = new List<String>();
List<String> m = l; // Do I have two lists, l and m, that can be modified independently? Or do I have two entities, l and m, that both refer to the same List object?
List l=新列表();
列表m=l;//我有两个列表,l和m,可以独立修改吗?或者我有两个实体,l和m,它们都指向同一个列表对象?
记住Java中出现的空指针异常


如果您一直在使用Java,那么您已经在使用指针了。它们在C++中并不是那么不同,但是它们在C++中是直接可见和显式的,而不是java隐藏的方式。(数据+顶部)是一个很好的表达方式!谢谢你的参考!!不管是谁否决了这个,我都同意。但下次告诉我为什么这个答案没有帮助会更有建设性。不仅如此,我可以看到,而且其他人也可以看到为什么这个答案是错误的/没有用的,谢谢。谢谢你花时间写下如此透彻的解释!我真的很感谢你的帮助,谢谢你@edA-qamort-ora-y您应该试用或阅读标准。5[A]的工作原理与我描述的完全相同。我被纠正了。8.3.4-6中的注释明确指出它是可交换的。奇怪的