[英]invalid pointer conversion C++
我很高興在這里發布我的第一個問題。
所以我玩了一點點來理解這個概念,我發現了這個錯誤
錯誤:從“int*”到“int”的無效轉換 [-fpermissive]
這是代碼:
#include <iostream>
using namespace std;
int main(){
int* pa,pb,pc,a,b,c;
pa = &a;
cin >> a;
cout <<"the value of a :"<<a<<endl;
cout <<"the value of pointer of a :"<<*pa<<endl;
// the problem begins when reading values of b :
pb = &b; //<== error
cin >> b;
cout << "the value of b : "<<b<<endl;
cout <<"the value of pointer of b" <<*pb<<endl;
return 0;
}
我不知道為什么它用變量a
成功a
但在b
中用相同的語法失敗了?
編輯:謝謝大家,我知道這個問題很簡單,但我已經向你學習了:)
*
綁定到變量名,而不是類型。 所以你真正想要的是:
int *pa,*pb,*pc,a,b,c;
在聲明中
int* pa,pb,pc,a,b,c;
只有pa
被聲明為int*
。 其他變量聲明為int
。
您需要將變量聲明為
int *pa, *pb, *pc, a, b, c;
一個常見的建議是每行聲明一個變量(參見例如ES.10:每個聲明聲明一個名稱(僅) ),因為*
屬於變量,而不是類型,這可能會造成混淆。 你的
int* pa,pb,pc,a,b,c;
實際上是
int* pa;
int pb;
int pc;
int a;
int b;
int c;
但你想要:
int* pa;
int* pb;
int* pc;
int a;
int b;
int c;
換句話說,你得到錯誤是因為你的代碼pb
is an int
但&b
is an int*
。 第一個賦值沒問題,因為pa
是一個指針。
另一個常見的建議是始終初始化您的變量(請參閱ES.20:始終初始化一個對象),這樣更好
int a = 0;
int b = 0;
int c = 0;
int* pa = &a;
int* pb = &b;
int* pc = &c;
一旦你弄清楚pa
、 pb
和pc
是什么類型,你就可以使用auto
來獲得“正確的類型”:
auto a = 0; // 0 is an integer literal of type int
auto b = 0;
auto c = 0;
auto* pa = &a; // auto would be fine too, &a is a int*
auto* pb = &b;
auto* pc = &c;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.