[英]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.