繁体   English   中英

如何防止我的数组元素指针被重新分配

[英]How do I prevent my pointer for an array element from being reassigned

我对 C 很陌生,所以也许我使用的指针不正确。 我正在开发一个更大的程序,我遇到了一个问题,即指向数组第一个元素的指针随着数组的变化而不断变化(使用 PriorityQueue,所以它不断被重新排列,所以我'我遇到了问题)。

我已经为正在发生的事情做了一个非常基本的例子:


#include <stdio.h>

int main() {
    
    int testArray[] = {0, 1, 2, 3};
    
    int *pFirstElement = &testArray[0];
    
    printf("My first element: %d\n", *pFirstElement); // Prints 0
    
    testArray[0] = 9;
    
    printf("My first element: %d", *pFirstElement); // Prints 9 -> I want it to print 0
    
    return 0;
    
}

我想要一种方法,以便在我手动将 pFirstElement 重新分配为数组的第一个元素之前,不会重新分配 pFirstElement。 基本上,对数组的修改不应更改 pFirstElement 的值。 是因为指针指向testArray[0]的 memory 地址,而我不应该使用指针吗?

我使用指针的原因是我可以将它初始化为 NULL,然后我的 PriorityQueue 的一个用例是如果指针是 NULL,我知道我基本上需要出队。 不知道我还能怎么做这个逻辑。

任何建议都有帮助,谢谢!

由于pFirstElement只是对存储数组第一个元素的 memory 的引用,重新分配数组的第一个元素将更改pFirstElement指向的值。

int变量而不是int *设置为testArray[0]而不是&testArray[0]将创建数据的副本,而不是简单地存储对它的新引用。 该副本现在独立于testArray中的数据。

创建数据的副本是唯一的方法。 指针本身不能记住它指向的 memory 的过去值。

变量pFirstElement指向memory中的position,这里是第一个数组元素。 如果现在访问指针指向的值,则访问数组的第一个元素。 如果您只是想要第一个元素的副本,请使用int firstElement = testArray[0]; ,否则*pFirstElement =...等同于textArray[0] =...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM