程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++primer學習筆記chapter1~4

c++primer學習筆記chapter1~4

編輯:C++入門知識

c++primer學習筆記chapter1~4


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved