簡體   English   中英

重新分配指針給出錯誤

[英]reassign pointer gives error

我是C ++的新手,因此,如果我的問題似乎很基本,請原諒我,使用星號時我無法重新分配指針,這是我的代碼:

int val = 8;
int number = 23;
int *pointer = &val;
*pointer = &number;    //<-- error

這給出了一個錯誤:從不兼容類型int分配給int。 這是我嘗試過的:

pointer = &number;  // this works

因此,我的問題是,為什么這是錯誤的:* pointer =&number

在您的代碼中

 *pointer = &number;    //<-- error

通過說*pointer ,您將取消引用int類型的指針,然后嘗試為其分配一個指針類型值,這是不正確的。

您要做的就是分配變量的地址並保持該地址,您希望指針變量本身位於分配的LHS上。 所以,

 pointer = &number;

是正確的方法。

導致錯誤的原因是因為您誤解了每個變量的類型。

int val = 8; // type of `val` is int
int number = 23; // type of `number` is an int
int *pointer = &val; // type of `pointer` is an int *
*pointer = &number;    // type of `pointer` is int *, so type of `*pointer` is int

這是行不通的,因為*pointer 取消了對*pointer 引用 ,因此您要為指針分配一個地址,這不是您想要的。

當你說

int *pointer

*表示您正在創建指針,可以將*視為數據類型的一部分。 即它是一個指向整數類型的指針。 要引用指針本身(在內存中存儲地址的類型),您只需使用指針的名稱即可,就像常規變量一樣。

當添加* infront時,您將取消引用指針。 意味着,您正在訪問指針所指向的內存地址中存儲的任何內容,在本例中為int。

基本上,指針為您提供內存中的地址,*指針為您提供存儲在該地址的int。

int *pointer = &val;

打破這個實際上意味着

int* pointer;
pointer = &val;

當您取消對整數指針的引用時,它只是一個整數。當將&添加到非指針中時,它將成為一個指針。這樣做很不好,因為* ptr不是指針,而&i是指針

int n = 0;
int *ptr = &n //good,because they are both pointers
int i = 0;
*ptr = &i //bad because only one is a pointer

暫無
暫無

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

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