【不是惡夢的開始,而是再度的精進。】
這是我在練習指標變數取址的時候所發生問題,看一下簡單的程式碼
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int a = 5;
char b = 'f';
int* ptr;
ptr = &a;
cout << "\n變數a的位址為: " << ptr;
ptr = &b; // 問題出在這裡
cout << "\n變數b的位址為: " << ptr;
return 0;
}
打好程式碼後編譯,卻發生問題了
仔細的看一下程式碼,我設指標變數時是設為整數型態
int* ptr;
然而卻讓數值型的指標變數取字元型的變數位址
char b = 'f';
ptr = &b;
所以就 cannot convert 'char*' to 'int*' in assignment
賦值失敗
這讓我聯想到如果把字元賦值給數值變數會怎麼樣呢?
int a = 5;
a = 'A';
cout << "\n\na= " << a;
可以編譯成功,沒有警告或編譯錯誤訊息
輸出結果:
a= 65
65是字元'A'的十進制掃描碼
那....再試一次字串"A"
int a = 5;
a = "A";
cout << "\n\na= " << a;
編譯錯誤:
[Error] invalid conversion from 'const char*' to 'int' [-fpermissive]
因為左右單引號所括住著是字元,字元可以轉換成數值,左右雙引號括住的是字串,字串就不能轉換成數值了,所以 int a; 就無法賦值字串 "A"
延伸閱讀
.