1.int long short等,只規定了最小的字節為多少,具體和操作系統以及編譯器有關系,#include頭文件中規定了最大的值是多少
int a=INT_MAX;
short b=SHRT_MAX;
long c=LONG_MAX;
long long d=LLONG_MAX;
cout << a << endl << b << endl << c << endl << d << endl;
2.沒有初始化會怎麼樣?
如果不對變量進行初始化,那麼值為變量被創建之前的內存單元的值,不確定的;
3.如果超出變量最大的范圍會怎麼樣?
int a=INT_MAX;
cout << a << endl;
a++;
cout << a << endl;
2147483647
-2147483648
unsigned int a=0;
cout << a << endl;
a--;
cout << a << endl;
0
4294967295
4.char 的存儲,char類型在內存單元中存的是ASC碼,但是輸出的時候因為cout 的作用所以輸出字符;
char ch='M';
cout << ch << endl;
cout.put(ch);
cout << endl;
int i=ch;
cout << i << endl;
M
M
77
5.轉意字符 \
cout << "hello \"world!" << endl;
hello "world!
6.const 為什麼比define好?
能夠明確指定的類型;
利用c++的作用域規則將定義限制在特定的函數中;
const可以用於更復雜的類型;
7.小小數的問題
double a=3.14E2;
cout << a << endl;
double b=3.14e-1;
cout << b << endl;
314
0.314
float 和double 是精度的差異:
float a=3.14E23;
float b=a+1;
cout << b-a << endl;
0
因為float的精度就是前6或者7位,後面的位數加上或者減去對他沒有影響,所以結果為0;
8 . 除法
int a=10/3;
cout << a << endl;
double b=10/3;
cout << b << endl;
b=10/3.0;
cout << b << endl;
b=10.0/3;
cout << b << endl;
3
3
3.33333
3.33333
9.數組init中的幾種情況
int a[3]={1,2,3};
cout << sizeof(a[0]) << endl;
cout << sizeof(a) << endl;
int b[3]={0};
cout << b[2] << endl;
int c[3]={1};
cout << c[0] << " " << c[1] << endl;
int d[]={1,2,3,4};
cout << sizeof(d)/sizeof(d[0]) << endl;
4
12
0
1 0
4
10.字符串
char ch=83;
cout << ch << endl;
char *ch1="S";
cout << ch1 <
S
S
“S”不是字符常量,它表示’S”\0’兩個字符的字符串。“S”其實表示字符串的地址;
11 cin.get() cin.getline()的問題
都是讀一行,讀到\n結束;
但是cin.get()將換行符號仍然放在輸入隊列中,爾cin.getline()捨棄;
eg:
cin.get(name,20);
cin.get(add,20);
//沒來得及輸入就直接跳出來了,因為上一次\n還在輸入隊列中,這次以為是空的字符串
改為這樣又可以順利讀入
cin.getline(name,20);
cin.get(add,20);
讀入的拼接方法:
cin.get(name,20).get();
cin.get(add,20);//這樣可以成功輸入
接著幾個拼接的例子:
cin.getline(name,20).get(add,20);
cin >> name;
cin.get(add,20);
不能輸入,因為cin 輸入之後回車鍵生成的換行符號留在了輸入隊列中,所以,cin.get以為是空字符串,直接讀取了。
cin >> name;
cin.get();
cin.get(add,20);
等效於
(cin >> name).get();
cin.get(add,20);
getline(cin , str);沒有長度限制
12.string 類,直接“加減”
char name[]="vd";
cout << strlen(name) << endl;
string add="vd";
cout << add.size() << endl;
13.結構體:
struct node
{
int a;
int b;
} ;
node hello={1,2};
cout << hello.a << endl;
c++不提倡外部變量,但是提倡使用外部結構體聲明;
結構體直接可以復制:
struct node
{
int a;
int b;
} ;
node hello={1,2};
node world=hello;
可以缺省struct 的名字:
struct
{
int a;
int b;
} hello;
hello={1,2};
cout << hello.a << endl;
14.指針
在c++中int* 作為一種類型,但是申請多個的時候還是應該
int* p,*q;
而不是
int* p,q;
避免野指針,一定要在*解引用之前知道指針確定的指向;
int* p;
*p=123;
這種做法是危險的
給指針賦地址:
int* p;
*p=0xxxxxxx;//WA
*p=(int *) 0xffffff//AC