c语言 - 两个指针指向同一位置的问题



我对指针有问题,我不知道如何解决。我的指针p指向记忆中的某个地址。我想将指针q指向完全相同的地址。之后,我想将指针p指向 NULL。问题是,在我这样做之后,指针q也指向NULL,但我希望他继续指向初始地址。有没有办法做到这一点?以下是我想做的简单代码:

int* p = &a; //pointer "p" now points to "a"
int* q;
q = p; //pointer "q" points to "a" as well
*p = NULL; //pointer "p" points to NULL
printf("%d", *q); //pointer "q" points to NULL as well, but I want him to keep pointing to "a"

在代码中,p 和 q 指向相同的内存位置。您没有将指针更改为其他位置,而是覆盖了 p(也由 q 指向)指向 NULL 的值。

这应该有效。

int a = 5;
int* p = &a; //pointer "p" now points to "a"
int* q = &a;
p = q;
p = NULL; //pointer "p" points to NULL
printf("%d", *q);

*p = NULL; //pointer "p" points to NULL这是错误的,您可以取消引用p并设置为它引用NULL值。

使用p = NULL.

*p = NULL; //pointer "p" points to NULL

不,它没有。取消引用此指针并将a设置为 NULL 转换为int(通常为零)

如果要将p设置为 NULL,则需要p = NULL;

如果您的想法是p引用q指针,则需要将代码更改为:

int a = 5;
int* q = &a;
int **p; 
p = &q;
*p = NULL; //now *p && q are NULL

问题就在这里:*p = NULL; //pointer "p" points to NULL不是重置指针指向的位置,而是
在引用的位置设置值。

举个例子:

*ptr = value // (writes the value to the memory location of ptr)
ptr = value // (changes the referenced memory location to value)

代码中的问题是:

*p = NULL;

这样,您取消引用p并将NULL的值写入a,这在您的情况下是错误的。NULL旨在分配或比较指针,而不是指针指向的对象(除非引用的对象,此处a,也将是一个指针 - (指针到指针))。

溶液:

您需要省略取消引用运算符 (*):

p = NULL;

NULL分配给p而不是a


更正的代码(在线示例):

#include <stdio.h>
int main (void)  
{
int a = 5;
int* p = &a; //pointer "p" now points to "a"
int* q;
q = p;       //pointer "q" points to "a" as well
p = NULL;    //pointer "p" points to NULL
printf("*q = %dn", *q);
printf("p = %p", (void*)p);
}

输出:

*q = 5
p = (nil)

相关内容

  • 没有找到相关文章