日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体

發(fā)布時(shí)間:2025/3/20 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

黑馬程序員匠心之作|C++教程從0到1入門(mén)編程,學(xué)習(xí)編程不再難

文章目錄

    • 1、C++初識(shí)
      • 1.1 第一個(gè)c++程序
      • 1.2 注釋
      • 1.3 變量
      • 1.4 常量
      • 1.5 關(guān)鍵字
      • 1.6 標(biāo)識(shí)符命名規(guī)則
    • 2 數(shù)據(jù)類(lèi)型
      • 2.1 整型
      • 2.2 sizeof關(guān)鍵字
      • 2.3 實(shí)型(浮點(diǎn)型)(科學(xué)計(jì)數(shù)法)(定義float數(shù)字后加個(gè)f)
      • 2.4 字符型
      • 2.5 轉(zhuǎn)義字符
      • 2.6 字符串型
      • 2.7 布爾類(lèi)型 bool
      • 2.8 數(shù)據(jù)的輸入(鍵盤(pán)輸入cin)
    • 3 運(yùn)算符
      • 3.1 算術(shù)運(yùn)算符
      • 3.2 賦值運(yùn)算符
      • 3.3 比較運(yùn)算符
      • 3.4 邏輯運(yùn)算符
    • 4 程序流程結(jié)構(gòu)
      • 4.1 選擇結(jié)構(gòu)
        • 4.1.1 if語(yǔ)句
        • 4.1.2 三目運(yùn)算符(略)
        • 4.1.3 switch語(yǔ)句(略)
      • 4.2 循環(huán)結(jié)構(gòu)(略)
        • 4.2.1 while循環(huán)語(yǔ)句
        • 4.2.2 do...while循環(huán)語(yǔ)句
        • 4.2.3 for循環(huán)語(yǔ)句(略)
        • 4.2.4 嵌套循環(huán)(略)
      • 4.3 跳轉(zhuǎn)語(yǔ)句(略)
        • 4.3.1 break語(yǔ)句
        • 4.3.2 continue語(yǔ)句
        • 4.3.3 goto語(yǔ)句
    • 5 數(shù)組
      • 5.1 概述
      • 5.2 一維數(shù)組
        • 5.2.1 一維數(shù)組定義方式
        • 5.2.2 一維數(shù)組數(shù)組名
        • 5.2.3 冒泡排序(略)
      • 5.3 二維數(shù)組
        • 5.3.1 二維數(shù)組定義方式
        • 5.3.2 二維數(shù)組數(shù)組名
    • 6 函數(shù)
      • 6.1 概述
      • 6.2 函數(shù)的定義
      • 6.3 函數(shù)的調(diào)用
      • 6.4 值傳遞
      • **6.5 函數(shù)的常見(jiàn)樣式**
      • 6.6 函數(shù)的聲明
      • 6.7 函數(shù)的分文件編寫(xiě)
    • 7 指針
      • 7.1 指針的基本概念
      • 7.2 指針變量的定義和使用
      • 7.3 指針?biāo)純?nèi)存空間
      • 7.4 空指針和野指針
      • 7.5 const修飾指針
      • 7.6 指針和數(shù)組
      • 7.7 指針和函數(shù)
      • 7.8 指針、數(shù)組、函數(shù)(略)
    • 8 結(jié)構(gòu)體
      • 8.1 結(jié)構(gòu)體基本概念
      • 8.2 結(jié)構(gòu)體定義和使用
      • 8.3 結(jié)構(gòu)體數(shù)組
      • 8.4 結(jié)構(gòu)體指針
      • 8.5 結(jié)構(gòu)體嵌套結(jié)構(gòu)體
      • 8.6 結(jié)構(gòu)體做函數(shù)參數(shù) (傳結(jié)構(gòu)體和傳結(jié)構(gòu)體指針的比較)
      • 8.7 結(jié)構(gòu)體中 const使用場(chǎng)景
      • 8.8 結(jié)構(gòu)體案例(注意,數(shù)組名作為函數(shù)參數(shù)傳遞時(shí),傳的是首元素地址)(設(shè)置隨機(jī)數(shù)種子srand、rand())
        • 8.8.1 案例1

1、C++初識(shí)

1.1 第一個(gè)c++程序

#include <iostream> using namespace std;int main() {cout << "hello" << endl;system("pause");return 0; }

結(jié)果:

hello

1.2 注釋

單行注釋與多行注釋

1.3 變量

語(yǔ)法:數(shù)據(jù)類(lèi)型 變量名 = 初始值;

注意:C++在創(chuàng)建變量時(shí),必須給變量一個(gè)初始值,否則會(huì)報(bào)錯(cuò)

1.4 常量

  • #define 宏常量: #define 常量名 常量值
    通常在文件上方定義,表示一個(gè)常量

  • const修飾的變量 const 數(shù)據(jù)類(lèi)型 常量名 = 常量值
    通常在變量定義前加關(guān)鍵字const,修飾該變量為常量,不可修改

  • 示例:

    //1、宏常量 #define day 7int main() {cout << "一周里總共有 " << day << " 天" << endl;//day = 8; //報(bào)錯(cuò),宏常量不可以修改//2、const修飾變量const int month = 12;cout << "一年里總共有 " << month << " 個(gè)月份" << endl;//month = 24; //報(bào)錯(cuò),常量是不可以修改的system("pause");return 0; }

    1.5 關(guān)鍵字

    提示:在給變量或者常量起名稱時(shí)候,不要用C++得關(guān)鍵字,否則會(huì)產(chǎn)生歧義。

    asmdoifreturntypedef
    autodoubleinlineshorttypeid
    booldynamic_castintsignedtypename
    breakelselongsizeofunion
    caseenummutablestaticunsigned
    catchexplicitnamespacestatic_castusing
    charexportnewstructvirtual
    classexternoperatorswitchvoid
    constfalseprivatetemplatevolatile
    const_castfloatprotectedthiswchar_t
    continueforpublicthrowwhile
    defaultfriendregistertrue
    deletegotoreinterpret_casttry

    1.6 標(biāo)識(shí)符命名規(guī)則

    作用:C++規(guī)定給標(biāo)識(shí)符(變量、常量)命名時(shí),有一套自己的規(guī)則

    • 標(biāo)識(shí)符不能是關(guān)鍵字
    • 標(biāo)識(shí)符只能由字母、數(shù)字、下劃線組成
    • 第一個(gè)字符必須為字母或下劃線
    • 標(biāo)識(shí)符中字母區(qū)分大小寫(xiě)

    建議:給標(biāo)識(shí)符命名時(shí),爭(zhēng)取做到見(jiàn)名知意的效果,方便自己和他人的閱讀

    2 數(shù)據(jù)類(lèi)型

    C++規(guī)定在創(chuàng)建一個(gè)變量或者常量時(shí),必須要指定出相應(yīng)的數(shù)據(jù)類(lèi)型,否則無(wú)法給變量分配內(nèi)存

    2.1 整型

    作用:整型變量表示的是整數(shù)類(lèi)型的數(shù)據(jù)

    C++中能夠表示整型的類(lèi)型有以下幾種方式,區(qū)別在于所占內(nèi)存空間不同

    數(shù)據(jù)類(lèi)型占用空間取值范圍
    short(短整型)2字節(jié)(-2^15 ~ 2^15-1)
    int(整型)4字節(jié)(-2^31 ~ 2^31-1)
    long(長(zhǎng)整形)Windows為4字節(jié),Linux為4字節(jié)(32位),8字節(jié)(64位)(-2^31 ~ 2^31-1)
    long long(長(zhǎng)長(zhǎng)整形)8字節(jié)(-2^63 ~ 2^63-1)

    2.2 sizeof關(guān)鍵字

    作用:利用sizeof關(guān)鍵字可以統(tǒng)計(jì)數(shù)據(jù)類(lèi)型所占內(nèi)存大小

    語(yǔ)法: sizeof( 數(shù)據(jù)類(lèi)型 / 變量)

    示例:

    #include <iostream> using namespace std;int main() {cout << "short 類(lèi)型所占內(nèi)存空間為: " << sizeof(short) << endl;cout << "int 類(lèi)型所占內(nèi)存空間為: " << sizeof(int) << endl;cout << "long 類(lèi)型所占內(nèi)存空間為: " << sizeof(long) << endl;cout << "long long 類(lèi)型所占內(nèi)存空間為: " << sizeof(long long) << endl;system("pause");return 0; }

    結(jié)果:

    short 類(lèi)型所占內(nèi)存空間為: 2 int 類(lèi)型所占內(nèi)存空間為: 4 long 類(lèi)型所占內(nèi)存空間為: 4 long long 類(lèi)型所占內(nèi)存空間為: 8

    2.3 實(shí)型(浮點(diǎn)型)(科學(xué)計(jì)數(shù)法)(定義float數(shù)字后加個(gè)f)

    作用:用于表示小數(shù)

    浮點(diǎn)型變量分為兩種:

  • 單精度f(wàn)loat
  • 雙精度double
  • 兩者的區(qū)別在于表示的有效數(shù)字范圍不同。

    數(shù)據(jù)類(lèi)型占用空間有效數(shù)字范圍
    float4字節(jié)7位有效數(shù)字
    double8字節(jié)15~16位有效數(shù)字

    示例:

    #include <iostream> using namespace std;int main() {float f1 = 3.1456756743f;double d1 = 3.1454545555;cout << f1 << endl;cout << d1 << endl;cout << "float sizeof = " << sizeof(f1) << endl;cout << "double sizeof = " << sizeof(d1) << endl;//科學(xué)計(jì)數(shù)法float f2 = 3e2; // 3 * 10 ^ 2 cout << "f2 = " << f2 << endl;float f3 = 3e-2; // 3 * 0.1 ^ 2cout << "f3 = " << f3 << endl;system("pause");return 0; }

    運(yùn)行結(jié)果:

    3.14568 3.14545 float sizeof = 4 double sizeof = 8 f2 = 300 f3 = 0.03

    float數(shù)字后加個(gè)f的原因是減少一步轉(zhuǎn)換,因?yàn)椴患拥脑?#xff0c;系統(tǒng)會(huì)識(shí)別成double型

    VS默認(rèn)最多輸出六位小數(shù)

    2.4 字符型

    作用:字符型變量用于顯示單個(gè)字符

    語(yǔ)法:char ch = 'a';

    注意1:在顯示字符型變量時(shí),用單引號(hào)將字符括起來(lái),不要用雙引號(hào)

    注意2:單引號(hào)內(nèi)只能有一個(gè)字符,不可以是字符串

    • C和C++中字符型變量只占用1個(gè)字節(jié)。
    • 字符型變量并不是把字符本身放到內(nèi)存中存儲(chǔ),而是將對(duì)應(yīng)的ASCII編碼放入到存儲(chǔ)單元

    示例:

    #include <iostream> using namespace std;int main() {char ch = 'a';cout << ch << endl;cout << sizeof(char) << endl;//ch = "abcde"; //錯(cuò)誤,不可以用雙引號(hào)//ch = 'abcde'; //錯(cuò)誤,單引號(hào)內(nèi)只能引用一個(gè)字符cout << (int)ch << endl; //查看字符a對(duì)應(yīng)的ASCII碼ch = 97; //可以直接用ASCII給字符型變量賦值cout << ch << endl;system("pause");return 0; }

    運(yùn)行結(jié)果:

    a 1 97 a

    2.5 轉(zhuǎn)義字符

    作用:用于表示一些不能顯示出來(lái)的ASCII字符

    現(xiàn)階段我們常用的轉(zhuǎn)義字符有:\n \\ \t

    轉(zhuǎn)義字符含義ASCII碼值(十進(jìn)制)
    \a警報(bào)007
    \b退格(BS) ,將當(dāng)前位置移到前一列008
    \f換頁(yè)(FF),將當(dāng)前位置移到下頁(yè)開(kāi)頭012
    \n換行(LF) ,將當(dāng)前位置移到下一行開(kāi)頭010
    \r回車(chē)(CR) ,將當(dāng)前位置移到本行開(kāi)頭013
    \t水平制表(HT) (跳到下一個(gè)TAB位置)009
    \v垂直制表(VT)011
    \\代表一個(gè)反斜線字符""092
    代表一個(gè)單引號(hào)(撇號(hào))字符039
    "代表一個(gè)雙引號(hào)字符034
    ?代表一個(gè)問(wèn)號(hào)063
    \0數(shù)字0000
    \ddd8進(jìn)制轉(zhuǎn)義字符,d范圍0~73位8進(jìn)制
    \xhh16進(jìn)制轉(zhuǎn)義字符,h范圍09,af,A~F3位16進(jìn)制

    示例:

    #include <iostream> using namespace std;int main() {cout << "\\" << endl;cout << "\tHello" << endl;cout << "\n" << endl;system("pause");return 0; }

    結(jié)果:

    \Hello

    2.6 字符串型

    作用:用于表示一串字符

    兩種風(fēng)格

  • C風(fēng)格字符串: char 變量名[] = "字符串值"

    示例:

  • int main() {char str1[] = "hello world";cout << str1 << endl;system("pause");return 0; }

    注意:C風(fēng)格的字符串要用雙引號(hào)括起來(lái)

  • C++風(fēng)格字符串: string 變量名 = "字符串值"
    示例:
  • int main() {string str = "hello world";cout << str << endl;system("pause");return 0; }

    注意:C++風(fēng)格字符串,需要加入頭文件==#include<string>==

    2.7 布爾類(lèi)型 bool

    作用:布爾數(shù)據(jù)類(lèi)型代表真或假的值

    bool類(lèi)型只有兩個(gè)值:

    • true — 真(本質(zhì)是1)
    • false — 假(本質(zhì)是0)

    bool類(lèi)型占1個(gè)字節(jié)大小

    示例:

    #include <iostream> using namespace std;int main() {bool flag = true;cout << flag << endl; // 1flag = false;cout << flag << endl; // 0cout << "size of bool = " << sizeof(bool) << endl; //1system("pause");return 0; }

    2.8 數(shù)據(jù)的輸入(鍵盤(pán)輸入cin)

    作用:用于從鍵盤(pán)獲取數(shù)據(jù)

    關(guān)鍵字:cin

    語(yǔ)法: cin >> 變量

    示例:

    #include <iostream> using namespace std;int main() {//整型輸入int a = 0;cout << "請(qǐng)輸入整型變量:" << endl;cin >> a;cout << a << endl;//浮點(diǎn)型輸入double d = 0;cout << "請(qǐng)輸入浮點(diǎn)型變量:" << endl;cin >> d;cout << d << endl;//字符型輸入char ch = 0;cout << "請(qǐng)輸入字符型變量:" << endl;cin >> ch;cout << ch << endl;//字符串型輸入string str;cout << "請(qǐng)輸入字符串型變量:" << endl;cin >> str;cout << str << endl;//布爾類(lèi)型輸入bool flag = true;cout << "請(qǐng)輸入布爾型變量:" << endl;cin >> flag;cout << flag << endl;system("pause");return EXIT_SUCCESS; }

    3 運(yùn)算符

    作用:用于執(zhí)行代碼的運(yùn)算

    本章我們主要講解以下幾類(lèi)運(yùn)算符:

    運(yùn)算符類(lèi)型作用
    算術(shù)運(yùn)算符用于處理四則運(yùn)算
    賦值運(yùn)算符用于將表達(dá)式的值賦給變量
    比較運(yùn)算符用于表達(dá)式的比較,并返回一個(gè)真值或假值
    邏輯運(yùn)算符用于根據(jù)表達(dá)式的值返回真值或假值

    3.1 算術(shù)運(yùn)算符

    作用:用于處理四則運(yùn)算

    算術(shù)運(yùn)算符包括以下符號(hào):

    運(yùn)算符術(shù)語(yǔ)示例結(jié)果
    +正號(hào)+33
    -負(fù)號(hào)-3-3
    +10 + 515
    -10 - 55
    *10 * 550
    /10 / 52
    %取模(取余)10 % 31
    ++前置遞增a=2; b=++a;a=3; b=3;
    ++后置遞增a=2; b=a++;a=3; b=2;
    前置遞減a=2; b=–a;a=1; b=1;
    后置遞減a=2; b=a–;a=1; b=2;

    示例1:

    #include <iostream> using namespace std;//加減乘除 int main() {int a1 = 10;int b1 = 3;cout << a1 + b1 << endl; //13cout << a1 - b1 << endl; //7cout << a1 * b1 << endl; //30cout << a1 / b1 << endl; //3 兩個(gè)整數(shù)相除結(jié)果依然是整數(shù)int a2 = 10;int b2 = 20;cout << a2 / b2 << endl; //0int a3 = 10;int b3 = 0;//cout << a3 / b3 << endl; //報(bào)錯(cuò),除數(shù)不可以為0//兩個(gè)小數(shù)可以相除double d1 = 0.5; double d2 = 0.25;cout << d1 / d2 << endl; //2system("pause");return 0; }

    示例2:

    #include <iostream> using namespace std;//取模 int main() {int a1 = 10;int b1 = 3;cout << 10 % 3 << endl; //1int a2 = 10;int b2 = 20;cout << a2 % b2 << endl; //10int a3 = 10;int b3 = 0;//cout << a3 % b3 << endl; //取模運(yùn)算時(shí),除數(shù)也不能為0//兩個(gè)小數(shù)不可以取模double d1 = 3.14;double d2 = 1.1;//cout << d1 % d2 << endl;system("pause");return 0; }

    示例3:

    #include <iostream> using namespace std;//遞增 int main() {//后置遞增int a = 10;a++; //等價(jià)于a = a + 1cout << a << endl; // 11//前置遞增int b = 10;++b;cout << b << endl; // 11//區(qū)別//前置遞增先對(duì)變量進(jìn)行++,再計(jì)算表達(dá)式int a2 = 10;int b2 = ++a2 * 10;cout << b2 << endl; //110//后置遞增先計(jì)算表達(dá)式,后對(duì)變量進(jìn)行++int a3 = 10;int b3 = a3++ * 10;cout << b3 << endl; //100system("pause");return 0; }

    總結(jié):前置遞增先對(duì)變量進(jìn)行++,再計(jì)算表達(dá)式,后置遞增相反

    3.2 賦值運(yùn)算符

    **作用:**用于將表達(dá)式的值賦給變量

    賦值運(yùn)算符包括以下幾個(gè)符號(hào):

    運(yùn)算符術(shù)語(yǔ)示例結(jié)果
    =賦值a=2; b=3;a=2; b=3;
    +=加等于a=0; a+=2;a=2;
    -=減等于a=5; a-=3;a=2;
    *=乘等于a=2; a*=2;a=4;
    /=除等于a=4; a/=2;a=2;
    %=模等于a=3; a%2;a=1;

    示例:

    #include <iostream> using namespace std;int main() {//賦值運(yùn)算符// =int a = 10;a = 100;cout << "a = " << a << endl; //100// +=a = 10;a += 2; // a = a + 2;cout << "a = " << a << endl; //12// -=a = 10;a -= 2; // a = a - 2cout << "a = " << a << endl; //8// *=a = 10;a *= 2; // a = a * 2cout << "a = " << a << endl; //20// /=a = 10;a /= 2; // a = a / 2;cout << "a = " << a << endl; //5// %=a = 10;a %= 2; // a = a % 2;cout << "a = " << a << endl; //0system("pause");return 0; }

    3.3 比較運(yùn)算符

    作用:用于表達(dá)式的比較,并返回一個(gè)真值或假值

    比較運(yùn)算符有以下符號(hào):

    運(yùn)算符術(shù)語(yǔ)示例結(jié)果
    ==相等于4 == 30
    !=不等于4 != 31
    <小于4 < 30
    >大于4 > 31
    <=小于等于4 <= 30
    >=大于等于4 >= 11

    示例:

    #include <iostream> using namespace std;int main() {int a = 10;int b = 20;cout << (a == b) << endl; // 0 cout << (a != b) << endl; // 1cout << (a > b) << endl; // 0cout << (a < b) << endl; // 1cout << (a >= b) << endl; // 0cout << (a <= b) << endl; // 1system("pause");return 0; }

    注意:C和C++ 語(yǔ)言的比較運(yùn)算中, “真”用數(shù)字“1”來(lái)表示, “假”用數(shù)字“0”來(lái)表示。

    3.4 邏輯運(yùn)算符

    **作用:**用于根據(jù)表達(dá)式的值返回真值或假值

    邏輯運(yùn)算符有以下符號(hào):

    運(yùn)算符術(shù)語(yǔ)示例結(jié)果
    !!a如果a為假,則!a為真; 如果a為真,則!a為假。
    &&a && b如果a和b都為真,則結(jié)果為真,否則為假。
    ||a || b如果a和b有一個(gè)為真,則結(jié)果為真,二者都為假時(shí),結(jié)果為假。

    示例1:邏輯非

    #include <iostream> using namespace std;//邏輯運(yùn)算符 --- 非 int main() {int a = 10;cout << !a << endl; // 0cout << !!a << endl; // 1system("pause");return 0; }

    總結(jié): 真變假,假變真(只要不是0就為真)

    示例2:邏輯與

    #include <iostream> using namespace std;//邏輯運(yùn)算符 --- 與 int main() {int a = 10;int b = 10;cout << (a && b) << endl;// 1a = 10;b = 0;cout << (a && b) << endl;// 0 a = 0;b = 0;cout << (a && b) << endl;// 0system("pause");return 0; }

    總結(jié):邏輯與運(yùn)算符總結(jié): 同真為真,其余為假

    示例3:邏輯或

    #include <iostream> using namespace std;//邏輯運(yùn)算符 --- 或 int main() {int a = 10;int b = 10;cout << (a || b) << endl;// 1a = 10;b = 0;cout << (a || b) << endl;// 1 a = 0;b = 0;cout << (a || b) << endl;// 0system("pause");return 0; }

    4 程序流程結(jié)構(gòu)

    C/C++支持最基本的三種程序運(yùn)行結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)

    • 順序結(jié)構(gòu):程序按順序執(zhí)行,不發(fā)生跳轉(zhuǎn)
    • 選擇結(jié)構(gòu):依據(jù)條件是否滿足,有選擇的執(zhí)行相應(yīng)功能
    • 循環(huán)結(jié)構(gòu):依據(jù)條件是否滿足,循環(huán)多次執(zhí)行某段代碼

    4.1 選擇結(jié)構(gòu)

    4.1.1 if語(yǔ)句

    作用:執(zhí)行滿足條件的語(yǔ)句

    if語(yǔ)句的三種形式

    • 單行格式if語(yǔ)句

    • 多行格式if語(yǔ)句

    • 多條件的if語(yǔ)句

  • 單行格式if語(yǔ)句:if(條件){ 條件滿足執(zhí)行的語(yǔ)句 }

    示例:

  • #include <iostream> using namespace std;int main() {//選擇結(jié)構(gòu)-單行if語(yǔ)句//輸入一個(gè)分?jǐn)?shù),如果分?jǐn)?shù)大于600分,視為考上一本大學(xué),并在屏幕上打印int score = 0;cout << "請(qǐng)輸入一個(gè)分?jǐn)?shù):" << endl;cin >> score;cout << "您輸入的分?jǐn)?shù)為: " << score << endl;//if語(yǔ)句//注意事項(xiàng),在if判斷語(yǔ)句后面,不要加分號(hào)if (score > 600){cout << "我考上了一本大學(xué)!!!" << endl;}system("pause");return 0; }

    注意:if條件表達(dá)式后不要加分號(hào)

  • 多行格式if語(yǔ)句:if(條件){ 條件滿足執(zhí)行的語(yǔ)句 }else{ 條件不滿足執(zhí)行的語(yǔ)句 };

    示例:
  • #include <iostream> using namespace std;int main() {int score = 0;cout << "請(qǐng)輸入考試分?jǐn)?shù):" << endl;cin >> score;if (score > 600){cout << "我考上了一本大學(xué)" << endl;}else{cout << "我未考上一本大學(xué)" << endl;}system("pause");return 0; }
  • 多條件的if語(yǔ)句:if(條件1){ 條件1滿足執(zhí)行的語(yǔ)句 }else if(條件2){條件2滿足執(zhí)行的語(yǔ)句}... else{ 都不滿足執(zhí)行的語(yǔ)句}

    示例:
  • #include <iostream> using namespace std;int main() {int score = 0;cout << "請(qǐng)輸入考試分?jǐn)?shù):" << endl;cin >> score;if (score > 600){cout << "我考上了一本大學(xué)" << endl;}else if (score > 500){cout << "我考上了二本大學(xué)" << endl;}else if (score > 400){cout << "我考上了三本大學(xué)" << endl;}else{cout << "我未考上本科" << endl;}system("pause");return 0; }

    嵌套if語(yǔ)句:在if語(yǔ)句中,可以嵌套使用if語(yǔ)句,達(dá)到更精確的條件判斷

    案例:略

    4.1.2 三目運(yùn)算符(略)

    作用: 通過(guò)三目運(yùn)算符實(shí)現(xiàn)簡(jiǎn)單的判斷

    語(yǔ)法:表達(dá)式1 ? 表達(dá)式2 :表達(dá)式3

    解釋:

    如果表達(dá)式1的值為真,執(zhí)行表達(dá)式2,并返回表達(dá)式2的結(jié)果;

    如果表達(dá)式1的值為假,執(zhí)行表達(dá)式3,并返回表達(dá)式3的結(jié)果。

    總結(jié):和if語(yǔ)句比較,三目運(yùn)算符優(yōu)點(diǎn)是短小整潔,缺點(diǎn)是如果用嵌套,結(jié)構(gòu)不清晰

    4.1.3 switch語(yǔ)句(略)

    作用:執(zhí)行多條件分支語(yǔ)句

    語(yǔ)法:

    switch(表達(dá)式){case 結(jié)果1:執(zhí)行語(yǔ)句;break;case 結(jié)果2:執(zhí)行語(yǔ)句;break;...default:執(zhí)行語(yǔ)句;break;}

    注意1:switch語(yǔ)句中表達(dá)式類(lèi)型只能是整型或者字符型

    注意2:case里如果沒(méi)有break,那么程序會(huì)一直向下執(zhí)行

    總結(jié):與if語(yǔ)句比,對(duì)于多條件判斷時(shí),switch的結(jié)構(gòu)清晰,執(zhí)行效率高,缺點(diǎn)是switch不可以判斷區(qū)間

    4.2 循環(huán)結(jié)構(gòu)(略)

    4.2.1 while循環(huán)語(yǔ)句

    **作用:**滿足循環(huán)條件,執(zhí)行循環(huán)語(yǔ)句

    語(yǔ)法:while(循環(huán)條件){ 循環(huán)語(yǔ)句 }

    解釋:只要循環(huán)條件的結(jié)果為真,就執(zhí)行循環(huán)語(yǔ)句

    注意:在執(zhí)行循環(huán)語(yǔ)句時(shí)候,程序必須提供跳出循環(huán)的出口,否則出現(xiàn)死循環(huán)

    4.2.2 do…while循環(huán)語(yǔ)句

    作用: 滿足循環(huán)條件,執(zhí)行循環(huán)語(yǔ)句

    語(yǔ)法: do{ 循環(huán)語(yǔ)句 } while(循環(huán)條件);

    注意:與while的區(qū)別在于do…while會(huì)先執(zhí)行一次循環(huán)語(yǔ)句,再判斷循環(huán)條件

    總結(jié):與while循環(huán)區(qū)別在于,do…while先執(zhí)行一次循環(huán)語(yǔ)句,再判斷循環(huán)條件

    4.2.3 for循環(huán)語(yǔ)句(略)

    作用: 滿足循環(huán)條件,執(zhí)行循環(huán)語(yǔ)句

    語(yǔ)法:for(起始表達(dá)式;條件表達(dá)式;末尾循環(huán)體) { 循環(huán)語(yǔ)句; }

    注意:for循環(huán)中的表達(dá)式,要用分號(hào)進(jìn)行分隔

    總結(jié):while , do…while, for都是開(kāi)發(fā)中常用的循環(huán)語(yǔ)句,for循環(huán)結(jié)構(gòu)比較清晰,比較常用

    4.2.4 嵌套循環(huán)(略)

    作用: 在循環(huán)體中再嵌套一層循環(huán),解決一些實(shí)際問(wèn)題

    例如我們想在屏幕中打印如下圖片,就需要利用嵌套循環(huán)

    4.3 跳轉(zhuǎn)語(yǔ)句(略)

    4.3.1 break語(yǔ)句

    作用: 用于跳出選擇結(jié)構(gòu)或者循環(huán)結(jié)構(gòu)

    break使用的時(shí)機(jī):

    • 出現(xiàn)在switch條件語(yǔ)句中,作用是終止case并跳出switch
    • 出現(xiàn)在循環(huán)語(yǔ)句中,作用是跳出當(dāng)前的循環(huán)語(yǔ)句
    • 出現(xiàn)在嵌套循環(huán)中,跳出最近的內(nèi)層循環(huán)語(yǔ)句

    4.3.2 continue語(yǔ)句

    **作用:**在循環(huán)語(yǔ)句中,跳過(guò)本次循環(huán)中余下尚未執(zhí)行的語(yǔ)句,繼續(xù)執(zhí)行下一次循環(huán)

    注意:continue并沒(méi)有使整個(gè)循環(huán)終止,而break會(huì)跳出循環(huán)

    4.3.3 goto語(yǔ)句

    作用:可以無(wú)條件跳轉(zhuǎn)語(yǔ)句

    語(yǔ)法: goto 標(biāo)記;

    解釋:如果標(biāo)記的名稱存在,執(zhí)行到goto語(yǔ)句時(shí),會(huì)跳轉(zhuǎn)到標(biāo)記的位置

    注意:在程序中不建議使用goto語(yǔ)句,以免造成程序流程混亂

    5 數(shù)組

    5.1 概述

    所謂數(shù)組,就是一個(gè)集合,里面存放了相同類(lèi)型的數(shù)據(jù)元素

    特點(diǎn)1:數(shù)組中的每個(gè)數(shù)據(jù)元素都是相同的數(shù)據(jù)類(lèi)型

    特點(diǎn)2:數(shù)組是由連續(xù)的內(nèi)存位置組成的

    5.2 一維數(shù)組

    5.2.1 一維數(shù)組定義方式

    一維數(shù)組定義的三種方式:

  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ 數(shù)組長(zhǎng)度 ];
  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ 數(shù)組長(zhǎng)度 ] = { 值1,值2 ...};
  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ ] = { 值1,值2 ...};
  • 示例

    #include <iostream> using namespace std;int main() {//定義方式1//數(shù)據(jù)類(lèi)型 數(shù)組名[元素個(gè)數(shù)];int score[10];//利用下標(biāo)賦值score[0] = 100;score[1] = 99;score[2] = 85;//利用下標(biāo)輸出cout << score[0] << endl;cout << score[1] << endl;cout << score[2] << endl;//第二種定義方式//數(shù)據(jù)類(lèi)型 數(shù)組名[元素個(gè)數(shù)] = {值1,值2 ,值3 ...};//如果{}內(nèi)不足10個(gè)數(shù)據(jù),剩余數(shù)據(jù)用0補(bǔ)全int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };//逐個(gè)輸出//cout << score2[0] << endl;//cout << score2[1] << endl;//一個(gè)一個(gè)輸出太麻煩,因此可以利用循環(huán)進(jìn)行輸出for (int i = 0; i < 10; i++){cout << score2[i] << endl;}//定義方式3//數(shù)據(jù)類(lèi)型 數(shù)組名[] = {值1,值2 ,值3 ...};int score3[] = { 100,90,80,70,60,50,40,30,20,10 };for (int i = 0; i < 10; i++){cout << score3[i] << endl;}system("pause");return 0; }

    總結(jié)1:數(shù)組名的命名規(guī)范與變量名命名規(guī)范一致,不要和變量重名

    總結(jié)2:數(shù)組中下標(biāo)是從0開(kāi)始索引

    5.2.2 一維數(shù)組數(shù)組名

    一維數(shù)組名稱的用途

  • 可以統(tǒng)計(jì)整個(gè)數(shù)組在內(nèi)存中的長(zhǎng)度
  • 可以獲取數(shù)組在內(nèi)存中的首地址
  • 示例:

    #include <iostream> using namespace std;int main() {//數(shù)組名用途//1、可以獲取整個(gè)數(shù)組占用內(nèi)存空間大小int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };cout << "整個(gè)數(shù)組所占內(nèi)存空間為: " << sizeof(arr) << endl; //40cout << "每個(gè)元素所占內(nèi)存空間為: " << sizeof(arr[0]) << endl; //4cout << "數(shù)組的元素個(gè)數(shù)為: " << sizeof(arr) / sizeof(arr[0]) << endl; //10//2、可以通過(guò)數(shù)組名獲取到數(shù)組首地址(打印的是地址的十進(jìn)制表示)cout << "數(shù)組首地址為: " << (int)arr << endl; //13629676cout << "數(shù)組中第一個(gè)元素地址為: " << (int)&arr[0] << endl; //13629676cout << "數(shù)組中第二個(gè)元素地址為: " << (int)&arr[1] << endl; //13629680//arr = 100; 錯(cuò)誤,數(shù)組名是常量,因此不可以賦值system("pause");return 0; }

    注意:數(shù)組名是常量,不可以賦值

    總結(jié)1:直接打印數(shù)組名,可以查看數(shù)組所占內(nèi)存的首地址

    總結(jié)2:對(duì)數(shù)組名進(jìn)行sizeof,可以獲取整個(gè)數(shù)組占內(nèi)存空間的大小

    5.2.3 冒泡排序(略)

    作用: 最常用的排序算法,對(duì)數(shù)組內(nèi)元素進(jìn)行排序

  • 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
  • 對(duì)每一對(duì)相鄰元素做同樣的工作,執(zhí)行完畢后,找到第一個(gè)最大值。
  • 重復(fù)以上的步驟,每次比較次數(shù)-1,直到不需要比較
  • 5.3 二維數(shù)組

    二維數(shù)組就是在一維數(shù)組上,多加一個(gè)維度。

    5.3.1 二維數(shù)組定義方式

    二維數(shù)組定義的四種方式:

  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ 行數(shù) ][ 列數(shù) ];
  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ 行數(shù) ][ 列數(shù) ] = { {數(shù)據(jù)1,數(shù)據(jù)2 } ,{數(shù)據(jù)3,數(shù)據(jù)4 } };
  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ 行數(shù) ][ 列數(shù) ] = { 數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,數(shù)據(jù)4};
  • 數(shù)據(jù)類(lèi)型 數(shù)組名[ ][ 列數(shù) ] = { 數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,數(shù)據(jù)4};
  • 建議:以上4種定義方式,利用第二種更加直觀,提高代碼的可讀性

    示例:

    #include <iostream> using namespace std;int main() {//方式1 //數(shù)組類(lèi)型 數(shù)組名 [行數(shù)][列數(shù)]int arr[2][3];arr[0][0] = 1;arr[0][1] = 2;arr[0][2] = 3;arr[1][0] = 4;arr[1][1] = 5;arr[1][2] = 6;for (int i = 0; i < 2; i++){for (int j = 0; j < 3; j++){cout << arr[i][j] << " ";}cout << endl; //endl相當(dāng)于換行符?\n,貌似是的}//方式2 //數(shù)據(jù)類(lèi)型 數(shù)組名[行數(shù)][列數(shù)] = { {數(shù)據(jù)1,數(shù)據(jù)2 } ,{數(shù)據(jù)3,數(shù)據(jù)4 } };int arr2[2][3] ={{1,2,3},{4,5,6}};//方式3//數(shù)據(jù)類(lèi)型 數(shù)組名[行數(shù)][列數(shù)] = { 數(shù)據(jù)1,數(shù)據(jù)2 ,數(shù)據(jù)3,數(shù)據(jù)4 };int arr3[2][3] = { 1,2,3,4,5,6 };//方式4 //數(shù)據(jù)類(lèi)型 數(shù)組名[][列數(shù)] = { 數(shù)據(jù)1,數(shù)據(jù)2 ,數(shù)據(jù)3,數(shù)據(jù)4 };int arr4[][3] = { 1,2,3,4,5,6 };system("pause");return 0; }

    運(yùn)行結(jié)果:

    1 2 3 4 5 6

    總結(jié):在定義二維數(shù)組時(shí),如果初始化了數(shù)據(jù),可以省略行數(shù)

    5.3.2 二維數(shù)組數(shù)組名

    • 查看二維數(shù)組所占內(nèi)存空間
    • 獲取二維數(shù)組首地址
    #include <iostream> using namespace std;int main() {//二維數(shù)組數(shù)組名int arr[2][3] ={{1,2,3},{4,5,6}};cout << "二維數(shù)組大小: " << sizeof(arr) << endl; //24cout << "二維數(shù)組一行大小: " << sizeof(arr[0]) << endl; //12cout << "二維數(shù)組元素大小: " << sizeof(arr[0][0]) << endl; //4cout << "二維數(shù)組行數(shù): " << sizeof(arr) / sizeof(arr[0]) << endl; //2cout << "二維數(shù)組列數(shù): " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl; //3//地址cout << "二維數(shù)組首地址:" << arr << endl; //00CFFB88cout << "二維數(shù)組第一行地址:" << arr[0] << endl; //00CFFB88cout << "二維數(shù)組第二行地址:" << arr[1] << endl; //00CFFB94(跟上面地址差12個(gè)字節(jié))cout << "二維數(shù)組第一個(gè)元素地址:" << &arr[0][0] << endl; //00CFFB88cout << "二維數(shù)組第二個(gè)元素地址:" << &arr[0][1] << endl; //00CFFB8C(跟上面地址差4個(gè)字節(jié))system("pause");return 0; }

    總結(jié)1:二維數(shù)組名就是這個(gè)數(shù)組的首地址

    總結(jié)2:對(duì)二維數(shù)組名進(jìn)行sizeof時(shí),可以獲取整個(gè)二維數(shù)組占用的內(nèi)存空間大小

    5.3.3 二維數(shù)組應(yīng)用案例(略)

    6 函數(shù)

    6.1 概述

    作用:將一段經(jīng)常使用的代碼封裝起來(lái),減少重復(fù)代碼

    一個(gè)較大的程序,一般分為若干個(gè)程序塊,每個(gè)模塊實(shí)現(xiàn)特定的功能。

    6.2 函數(shù)的定義

    函數(shù)的定義一般主要有5個(gè)步驟:

    1、返回值類(lèi)型

    2、函數(shù)名

    3、參數(shù)列表

    4、函數(shù)體語(yǔ)句

    5、return 表達(dá)式

    語(yǔ)法:

    返回值類(lèi)型 函數(shù)名 (參數(shù)列表) {函數(shù)體語(yǔ)句return表達(dá)式}
    • 返回值類(lèi)型 :一個(gè)函數(shù)可以返回一個(gè)值。在函數(shù)定義中
    • 函數(shù)名:給函數(shù)起個(gè)名稱
    • 參數(shù)列表:使用該函數(shù)時(shí),傳入的數(shù)據(jù)
    • 函數(shù)體語(yǔ)句:花括號(hào)內(nèi)的代碼,函數(shù)內(nèi)需要執(zhí)行的語(yǔ)句
    • return表達(dá)式: 和返回值類(lèi)型掛鉤,函數(shù)執(zhí)行完后,返回相應(yīng)的數(shù)據(jù)

    示例:定義一個(gè)加法函數(shù),實(shí)現(xiàn)兩個(gè)數(shù)相加

    //函數(shù)定義 int add(int num1, int num2) {int sum = num1 + num2;return sum; }

    6.3 函數(shù)的調(diào)用

    功能:使用定義好的函數(shù)

    語(yǔ)法:函數(shù)名(參數(shù))

    示例:

    #include <iostream> using namespace std;//函數(shù)定義 int add(int num1, int num2) //定義中的num1,num2稱為形式參數(shù),簡(jiǎn)稱形參 {int sum = num1 + num2;return sum; }int main() {int a = 10;int b = 10;//調(diào)用add函數(shù)int sum = add(a, b);//調(diào)用時(shí)的a,b稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參cout << "sum = " << sum << endl; //20a = 100;b = 100;sum = add(a, b);cout << "sum = " << sum << endl; //200system("pause");return 0; }

    總結(jié):函數(shù)定義里小括號(hào)內(nèi)稱為形參,函數(shù)調(diào)用時(shí)傳入的參數(shù)稱為實(shí)參

    6.4 值傳遞

    • 所謂值傳遞,就是函數(shù)調(diào)用時(shí)實(shí)參將數(shù)值傳入給形參
    • 值傳遞時(shí),如果形參發(fā)生,并不會(huì)影響實(shí)參

    示例:

    #include <iostream> using namespace std;void swap(int num1, int num2) {cout << "交換前:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;int temp = num1;num1 = num2;num2 = temp;cout << "交換后:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;//return ; 當(dāng)函數(shù)聲明時(shí)候,不需要返回值,可以不寫(xiě)return }int main() {int a = 10;int b = 20;swap(a, b);cout << "mian中的 a = " << a << endl;cout << "mian中的 b = " << b << endl;system("pause");return 0; }

    運(yùn)行結(jié)果:

    交換前: num1 = 10 num2 = 20 交換后: num1 = 20 num2 = 10 mian中的 a = 10 mian中的 b = 20 請(qǐng)按任意鍵繼續(xù). . .

    6.5 函數(shù)的常見(jiàn)樣式

    常見(jiàn)的函數(shù)樣式有4種

  • 無(wú)參無(wú)返
  • 有參無(wú)返
  • 無(wú)參有返
  • 有參有返
  • 示例:

    #include <iostream> using namespace std;//函數(shù)常見(jiàn)樣式 //1、 無(wú)參無(wú)返 void test01() {//void a = 10; //無(wú)類(lèi)型不可以創(chuàng)建變量,原因無(wú)法分配內(nèi)存cout << "this is test01" << endl;//test01(); 函數(shù)調(diào)用 }//2、 有參無(wú)返 void test02(int a) {cout << "this is test02" << endl;cout << "a = " << a << endl; }//3、無(wú)參有返 int test03() {cout << "this is test03 " << endl;return 10; }//4、有參有返 int test04(int a, int b) {cout << "this is test04 " << endl;int sum = a + b;return sum; }

    6.6 函數(shù)的聲明

    作用: 告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)。函數(shù)的實(shí)際主體可以單獨(dú)定義。

    • 函數(shù)的聲明可以多次,但是函數(shù)的定義只能有一次

    示例:

    #include <iostream> using namespace std;//聲明可以多次,定義只能一次 //聲明 int max(int a, int b); int max(int a, int b); //定義 int max(int a, int b) {return a > b ? a : b; }int main() {int a = 100;int b = 200;cout << max(a, b) << endl; //200system("pause");return 0; }

    6.7 函數(shù)的分文件編寫(xiě)

    作用:讓代碼結(jié)構(gòu)更加清晰

    函數(shù)分文件編寫(xiě)一般有4個(gè)步驟

  • 創(chuàng)建后綴名為.h的頭文件
  • 創(chuàng)建后綴名為.cpp的源文件
  • 在頭文件中寫(xiě)函數(shù)的聲明
  • 在源文件中寫(xiě)函數(shù)的定義
  • 示例:

    //swap.h文件 #include<iostream> using namespace std;//實(shí)現(xiàn)兩個(gè)數(shù)字交換的函數(shù)聲明 void swap(int a, int b); //swap.cpp文件 #include "swap.h"void swap(int a, int b) {int temp = a;a = b;b = temp;cout << "a = " << a << endl;cout << "b = " << b << endl; } //main函數(shù)文件 #include "swap.h" int main() {int a = 100;int b = 200;swap(a, b);system("pause");return 0; }
    • 特點(diǎn):cpp文件包含自己的頭文件
    • 在頭文件里包含內(nèi)置頭文件,以及聲明函數(shù)等

    7 指針

    7.1 指針的基本概念

    指針的作用: 可以通過(guò)指針間接訪問(wèn)內(nèi)存

    • 內(nèi)存編號(hào)是從0開(kāi)始記錄的,一般用十六進(jìn)制數(shù)字表示

    • 可以利用指針變量保存地址

    7.2 指針變量的定義和使用

    指針變量定義語(yǔ)法: 數(shù)據(jù)類(lèi)型 * 變量名;

    示例:

    #include <iostream> using namespace std;int main() {//1、指針的定義int a = 10; //定義整型變量a//指針定義語(yǔ)法: 數(shù)據(jù)類(lèi)型 * 變量名 ;int* p;//指針變量賦值p = &a; //指針指向變量a的地址cout << &a << endl; //打印數(shù)據(jù)a的地址 # 00B3FECCcout << p << endl; //打印指針變量p # 00B3FECC//2、指針的使用//通過(guò)*操作指針變量指向的內(nèi)存cout << "*p = " << *p << endl; //*p = 10system("pause");return 0; }

    指針變量和普通變量的區(qū)別

    • 普通變量存放的是數(shù)據(jù),指針變量存放的是地址
    • 指針變量可以通過(guò)" * "操作符,操作指針變量指向的內(nèi)存空間,這個(gè)過(guò)程稱為解引用

    總結(jié)1: 我們可以通過(guò) & 符號(hào) 獲取變量的地址

    總結(jié)2:利用指針可以記錄地址

    總結(jié)3:對(duì)指針變量解引用,可以操作指針指向的內(nèi)存

    7.3 指針?biāo)純?nèi)存空間

    提問(wèn):指針也是種數(shù)據(jù)類(lèi)型,那么這種數(shù)據(jù)類(lèi)型占用多少內(nèi)存空間?

    示例:

    #include <iostream> using namespace std;int main() {int a = 10;int* p;p = &a; //指針指向數(shù)據(jù)a的地址cout << *p << endl; //* 解引用 10cout << sizeof(p) << endl; //4cout << sizeof(char*) << endl; //4cout << sizeof(float*) << endl; //4cout << sizeof(double*) << endl; //4system("pause");return 0; }

    總結(jié):所有指針類(lèi)型在32位操作系統(tǒng)下是4個(gè)字節(jié)(在64位操作系統(tǒng)下為8個(gè)字節(jié))

    7.4 空指針和野指針

    空指針:指針變量指向內(nèi)存中編號(hào)為0的空間

    用途:初始化指針變量

    注意:空指針指向的內(nèi)存是不可以訪問(wèn)的

    示例1:空指針

    #include <iostream> using namespace std;int main() {//指針變量p指向內(nèi)存地址編號(hào)為0的空間int* p = NULL;//訪問(wèn)空指針報(bào)錯(cuò) //內(nèi)存編號(hào)0 ~255為系統(tǒng)占用內(nèi)存,不允許用戶訪問(wèn)cout << *p << endl; //報(bào)錯(cuò)system("pause");return 0; }

    野指針:指針變量指向非法的內(nèi)存空間

    示例2:野指針

    #include <iostream> using namespace std;int main() {//指針變量p指向內(nèi)存地址編號(hào)為0x1100的空間int* p = (int*)0x1100;//訪問(wèn)野指針報(bào)錯(cuò) cout << *p << endl;system("pause");return 0; }

    總結(jié):空指針和野指針都不是我們申請(qǐng)的空間,因此不要訪問(wèn)。

    7.5 const修飾指針

    const修飾指針有三種情況

  • const修飾指針 — 常量指針
  • const修飾常量 — 指針常量
  • const即修飾指針,又修飾常量
  • 示例:

    #include <iostream> using namespace std;int main() {int a = 10;int b = 10;//const修飾的是指針,指針指向可以改,指針指向的值不可以更改const int* p1 = &a;p1 = &b; //正確//*p1 = 100; 報(bào)錯(cuò)//const修飾的是常量,指針指向不可以改,指針指向的值可以更改int* const p2 = &a;//p2 = &b; //錯(cuò)誤*p2 = 100; //正確//const既修飾指針又修飾常量const int* const p3 = &a;//p3 = &b; //錯(cuò)誤//*p3 = 100; //錯(cuò)誤system("pause");return 0; }

    技巧:看const右側(cè)緊跟著的是指針還是常量, 是指針就是常量指針,是常量就是指針常量

    7.6 指針和數(shù)組

    **作用:**利用指針訪問(wèn)數(shù)組中元素

    示例:

    #include <iostream> using namespace std;int main() {int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr; //指向數(shù)組的指針cout << "第一個(gè)元素: " << arr[0] << endl;cout << "指針訪問(wèn)第一個(gè)元素: " << *p << endl;for (int i = 0; i < 10; i++){//利用指針遍歷數(shù)組cout << *p << endl;p++;}system("pause");return 0; }

    結(jié)果:

    第一個(gè)元素: 1 指針訪問(wèn)第一個(gè)元素: 1 1 2 3 4 5 6 7 8 9 10

    7.7 指針和函數(shù)

    **作用:**利用指針作函數(shù)參數(shù),可以修改實(shí)參的值

    示例:

    #include <iostream> using namespace std;//值傳遞 void swap1(int a, int b) {int temp = a;a = b;b = temp; } //地址傳遞 void swap2(int* p1, int* p2) {int temp = *p1;*p1 = *p2;*p2 = temp; }int main() {int a = 10;int b = 20;swap1(a, b); // 值傳遞不會(huì)改變實(shí)參cout << "a = " << a << endl; //10cout << "b = " << b << endl; //20swap2(&a, &b); //地址傳遞會(huì)改變實(shí)參cout << "a = " << a << endl; //20cout << "b = " << b << endl; //10system("pause");return 0; }

    總結(jié):如果不想修改實(shí)參,就用值傳遞,如果想修改實(shí)參,就用地址傳遞

    7.8 指針、數(shù)組、函數(shù)(略)

    **案例描述:**封裝一個(gè)函數(shù),利用冒泡排序,實(shí)現(xiàn)對(duì)整型數(shù)組的升序排序

    例如數(shù)組:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };

    總結(jié):當(dāng)數(shù)組名傳入到函數(shù)作為參數(shù)時(shí),被退化為指向首元素的指針

    8 結(jié)構(gòu)體

    8.1 結(jié)構(gòu)體基本概念

    結(jié)構(gòu)體屬于用戶自定義的數(shù)據(jù)類(lèi)型,允許用戶存儲(chǔ)不同的數(shù)據(jù)類(lèi)型

    8.2 結(jié)構(gòu)體定義和使用

    語(yǔ)法:struct 結(jié)構(gòu)體名 { 結(jié)構(gòu)體成員列表 };

    通過(guò)結(jié)構(gòu)體創(chuàng)建變量的方式有三種:

    • struct 結(jié)構(gòu)體名 變量名
    • struct 結(jié)構(gòu)體名 變量名 = { 成員1值 , 成員2值…}
    • 定義結(jié)構(gòu)體時(shí)順便創(chuàng)建變量

    示例:

    #include <iostream> using namespace std;//結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) }stu3; //結(jié)構(gòu)體變量創(chuàng)建方式3 int main() {//結(jié)構(gòu)體變量創(chuàng)建方式1struct student stu1; //struct 關(guān)鍵字可以省略stu1.name = "張三";stu1.age = 18;stu1.score = 100;cout << "姓名:" << stu1.name << " 年齡:" << stu1.age << " 分?jǐn)?shù):" << stu1.score << endl;//結(jié)構(gòu)體變量創(chuàng)建方式2struct student stu2 = { "李四",19,60 };cout << "姓名:" << stu2.name << " 年齡:" << stu2.age << " 分?jǐn)?shù):" << stu2.score << endl;stu3.name = "王五";stu3.age = 18;stu3.score = 80;cout << "姓名:" << stu3.name << " 年齡:" << stu3.age << " 分?jǐn)?shù):" << stu3.score << endl;system("pause");return 0; }

    運(yùn)行結(jié)果:

    姓名:張三 年齡:18 分?jǐn)?shù):100 姓名:李四 年齡:19 分?jǐn)?shù):60 姓名:王五 年齡:18 分?jǐn)?shù):80

    總結(jié)1:定義結(jié)構(gòu)體時(shí)的關(guān)鍵字是struct,不可省略

    總結(jié)2:創(chuàng)建結(jié)構(gòu)體變量時(shí),關(guān)鍵字struct可以省略

    總結(jié)3:結(jié)構(gòu)體變量利用操作符 ‘’.’’ 訪問(wèn)成員

    8.3 結(jié)構(gòu)體數(shù)組

    作用:將自定義的結(jié)構(gòu)體放入到數(shù)組中方便維護(hù)

    語(yǔ)法:struct 結(jié)構(gòu)體名 數(shù)組名[元素個(gè)數(shù)] = { {} , {} , ... {} }

    示例:

    #include <iostream> using namespace std;//結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) };int main() {//結(jié)構(gòu)體數(shù)組struct student arr[3] ={{"張三",18,80 },{"李四",19,60 },{"王五",20,70 }};for (int i = 0; i < 3; i++){cout << "姓名:" << arr[i].name << " 年齡:" << arr[i].age << " 分?jǐn)?shù):" << arr[i].score << endl;}system("pause");return 0; }

    運(yùn)行結(jié)果:

    姓名:張三 年齡:18 分?jǐn)?shù):80 姓名:李四 年齡:19 分?jǐn)?shù):60 姓名:王五 年齡:20 分?jǐn)?shù):70

    8.4 結(jié)構(gòu)體指針

    **作用:**通過(guò)指針訪問(wèn)結(jié)構(gòu)體中的成員

    • 利用操作符 ->可以通過(guò)結(jié)構(gòu)體指針訪問(wèn)結(jié)構(gòu)體屬性

    示例:

    #include <iostream> using namespace std;//結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) };int main() {struct student stu = { "張三",18,100, };struct student* p = &stu;p->score = 80; //指針通過(guò) -> 操作符可以訪問(wèn)成員cout << "姓名:" << p->name << " 年齡:" << p->age << " 分?jǐn)?shù):" << p->score << endl;system("pause");return 0; }

    運(yùn)行結(jié)果:

    姓名:張三 年齡:18 分?jǐn)?shù):80

    總結(jié):結(jié)構(gòu)體指針可以通過(guò) -> 操作符 來(lái)訪問(wèn)結(jié)構(gòu)體中的成員

    8.5 結(jié)構(gòu)體嵌套結(jié)構(gòu)體

    作用: 結(jié)構(gòu)體中的成員可以是另一個(gè)結(jié)構(gòu)體

    例如:每個(gè)老師輔導(dǎo)一個(gè)學(xué)員,一個(gè)老師的結(jié)構(gòu)體中,記錄一個(gè)學(xué)生的結(jié)構(gòu)體

    示例:

    #include <iostream> using namespace std;//學(xué)生結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) };//教師結(jié)構(gòu)體定義 struct teacher {//成員列表int id; //職工編號(hào)string name; //教師姓名int age; //教師年齡struct student stu; //子結(jié)構(gòu)體 學(xué)生 };int main() {struct teacher t1;t1.id = 10000;t1.name = "老王";t1.age = 40;t1.stu.name = "張三";t1.stu.age = 18;t1.stu.score = 100;cout << "教師 職工編號(hào): " << t1.id << " 姓名: " << t1.name << " 年齡: " << t1.age << endl;cout << "輔導(dǎo)學(xué)員 姓名: " << t1.stu.name << " 年齡:" << t1.stu.age << " 考試分?jǐn)?shù): " << t1.stu.score << endl;system("pause");return 0; } 教師 職工編號(hào): 10000 姓名: 老王 年齡: 40 輔導(dǎo)學(xué)員 姓名: 張三 年齡:18 考試分?jǐn)?shù): 100

    **總結(jié):**在結(jié)構(gòu)體中可以定義另一個(gè)結(jié)構(gòu)體作為成員,用來(lái)解決實(shí)際問(wèn)題

    8.6 結(jié)構(gòu)體做函數(shù)參數(shù) (傳結(jié)構(gòu)體和傳結(jié)構(gòu)體指針的比較)

    作用:將結(jié)構(gòu)體作為參數(shù)向函數(shù)中傳遞

    傳遞方式有兩種:

    • 值傳遞
    • 地址傳遞

    示例:

    #include <iostream> using namespace std;//學(xué)生結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) };//值傳遞 void printStudent(student stu) {stu.age = 28;cout << "子函數(shù)中 姓名:" << stu.name << " 年齡: " << stu.age << " 分?jǐn)?shù):" << stu.score << endl; }//地址傳遞 void printStudent2(student* stu) {stu->age = 28;cout << "子函數(shù)中 姓名:" << stu->name << " 年齡: " << stu->age << " 分?jǐn)?shù):" << stu->score << endl; }int main() {student stu = { "張三",18,100 };//值傳遞printStudent(stu);cout << "主函數(shù)中 姓名:" << stu.name << " 年齡: " << stu.age << " 分?jǐn)?shù):" << stu.score << endl;cout << endl;//地址傳遞printStudent2(&stu);cout << "主函數(shù)中 姓名:" << stu.name << " 年齡: " << stu.age << " 分?jǐn)?shù):" << stu.score << endl;system("pause");return 0; } 子函數(shù)中 姓名:張三 年齡: 28 分?jǐn)?shù):100 主函數(shù)中 姓名:張三 年齡: 18 分?jǐn)?shù):100子函數(shù)中 姓名:張三 年齡: 28 分?jǐn)?shù):100 主函數(shù)中 姓名:張三 年齡: 28 分?jǐn)?shù):100

    總結(jié):如果不想修改主函數(shù)中的數(shù)據(jù),用值傳遞,反之用地址傳遞

    8.7 結(jié)構(gòu)體中 const使用場(chǎng)景

    作用:用const來(lái)防止誤操作

    示例:

    #include <iostream> using namespace std;//學(xué)生結(jié)構(gòu)體定義 struct student {//成員列表string name; //姓名int age; //年齡int score; //分?jǐn)?shù) };//const使用場(chǎng)景 void printStudent(const student* stu) //加const防止函數(shù)體中的誤操作 {//stu->age = 100; //操作失敗,因?yàn)榧恿薱onst修飾cout << "姓名:" << stu->name << " 年齡:" << stu->age << " 分?jǐn)?shù):" << stu->score << endl;}int main() {student stu = { "張三",18,100 };printStudent(&stu);system("pause");return 0; }

    8.8 結(jié)構(gòu)體案例(注意,數(shù)組名作為函數(shù)參數(shù)傳遞時(shí),傳的是首元素地址)(設(shè)置隨機(jī)數(shù)種子srand、rand())

    8.8.1 案例1

    案例描述:

    學(xué)校正在做畢設(shè)項(xiàng)目,每名老師帶領(lǐng)5個(gè)學(xué)生,總共有3名老師,需求如下

    設(shè)計(jì)學(xué)生和老師的結(jié)構(gòu)體,其中在老師的結(jié)構(gòu)體中,有老師姓名和一個(gè)存放5名學(xué)生的數(shù)組作為成員

    學(xué)生的成員有姓名、考試分?jǐn)?shù),創(chuàng)建數(shù)組存放3名老師,通過(guò)函數(shù)給每個(gè)老師及所帶的學(xué)生賦值

    最終打印出老師數(shù)據(jù)以及老師所帶的學(xué)生數(shù)據(jù)。

    示例:

    #include <iostream> using namespace std;struct Student {string name;int score; }; struct Teacher {string name;Student sArray[5]; };void allocateSpace(Teacher tArray[], int len) {string tName = "教師";string sName = "學(xué)生";string nameSeed = "ABCDE";for (int i = 0; i < len; i++){tArray[i].name = tName + nameSeed[i];for (int j = 0; j < 5; j++){tArray[i].sArray[j].name = sName + nameSeed[j];tArray[i].sArray[j].score = rand() % 61 + 40;}} }void printTeachers(Teacher tArray[], int len) {for (int i = 0; i < len; i++){cout << tArray[i].name << endl;for (int j = 0; j < 5; j++){cout << "\t姓名:" << tArray[i].sArray[j].name << " 分?jǐn)?shù):" << tArray[i].sArray[j].score << endl;}} }int main() {srand((unsigned int)time(NULL)); //隨機(jī)數(shù)種子 頭文件 #include <ctime>Teacher tArray[3]; //老師數(shù)組int len = sizeof(tArray) / sizeof(Teacher);allocateSpace(tArray, len); //創(chuàng)建數(shù)據(jù)printTeachers(tArray, len); //打印數(shù)據(jù)system("pause");return 0; }

    運(yùn)行結(jié)果:

    教師A姓名:學(xué)生A 分?jǐn)?shù):75姓名:學(xué)生B 分?jǐn)?shù):58姓名:學(xué)生C 分?jǐn)?shù):79姓名:學(xué)生D 分?jǐn)?shù):44姓名:學(xué)生E 分?jǐn)?shù):56 教師B姓名:學(xué)生A 分?jǐn)?shù):46姓名:學(xué)生B 分?jǐn)?shù):42姓名:學(xué)生C 分?jǐn)?shù):75姓名:學(xué)生D 分?jǐn)?shù):97姓名:學(xué)生E 分?jǐn)?shù):40 教師C姓名:學(xué)生A 分?jǐn)?shù):62姓名:學(xué)生B 分?jǐn)?shù):63姓名:學(xué)生C 分?jǐn)?shù):42姓名:學(xué)生D 分?jǐn)?shù):92姓名:學(xué)生E 分?jǐn)?shù):99

    關(guān)于srand((unsigned int)time(NULL)),可見(jiàn):srand((unsigned int)time(NULL))引發(fā)的思考

    總結(jié)

    以上是生活随笔為你收集整理的【黑马程序员 C++教程从0到1入门编程】【笔记1】数据类型、运算符、程序流程结构、数组、函数、指针、结构体的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。