簡體   English   中英

兩個指針指向同一個地方的問題

[英]Problem with two pointers pointing to same place

我的指針有問題,我不知道如何解決。 我的指針p指向 memory 中的某個地址。 我想將指針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 指向相同的 memory 位置。 您沒有將指針更改為不同的位置,而是將 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; //pointer "p" points to NULL這是錯誤的,你取消引用p並設置為它引用的NULL值。

使用p = NULL

問題在這里: *p = NULL; //pointer "p" points to 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用於分配或與指針進行比較,而不是指向指針指向的 object(除非引用的 object,這里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 = %d\n", *q);
    printf("p = %p", (void*)p);
}

Output:

*q = 5
p = (nil)

*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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM