我的指针有问题,我不知道该如何解决。我的指针 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"
答案 0 :(得分:1)
在您的代码中,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);
答案 1 :(得分:0)
*p = NULL; //pointer "p" points to NULL
是错误的,您取消引用p
并将其引用的值设置为NULL
。
使用p = NULL
。
答案 2 :(得分:0)
问题出在这里:*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)
答案 3 :(得分:0)
您的代码中的问题是:
*p = NULL;
通过这种方式,您取消引用p
并将NULL
的值写入a
,这在您的情况下是错误的。 NULL
是要分配给指针或与指针进行比较,而不是指针所指向的对象(除非所引用的对象在这里a
也是指针-( pointer to pointer ))。
您需要省略解引用运算符(*
):
p = NULL;
将NULL
分配给p
,而不分配给a
。
正确的代码(Online Example):
#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 = %d\n", *q);
printf("p = %p", (void*)p);
}
输出:
*q = 5
p = (nil)
答案 4 :(得分:0)
*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