中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

帶有示例的C++指針

發(fā)布于:2021-01-28 13:40:31

0

208

0

C++ 指針 什么是指針?

什么是指針?

在C++中,指針是指保存另一變量地址的變量。與正則變量一樣,指針也有數(shù)據(jù)類型。例如,整型指針可以保存整型變量的地址。字符型指針可以保存字符型變量的地址。

您應(yīng)該將指針視為內(nèi)存地址的符號(hào)表示。通過指針,程序可以通過引用模擬調(diào)用。它們還可以創(chuàng)建和操作動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。在C++中,指針變量是指指向另一變量指向的內(nèi)存中的特定地址的變量。

 C++中的地址

為了理解C++指針,必須了解計(jì)算機(jī)如何存儲(chǔ)數(shù)據(jù)。

當(dāng)你在C++程序中創(chuàng)建變量時(shí),它會(huì)給計(jì)算機(jī)內(nèi)存分配一些空間。此變量的值存儲(chǔ)在指定的位置。

為了知道數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)內(nèi)存中的位置,C ++提供了&(引用)運(yùn)算符。操作員返回變量占用的地址。

例如,如果x是變量,&x返回變量的地址。

指針聲明語法

C++聲明采用以下語法:

    datatype *variable_name;

  • 數(shù)據(jù)類型是指針的基本類型,必須是有效的C ++數(shù)據(jù)類型。

  • variable_name是指針變量的名稱。

  • 上面用于指針聲明的星號(hào)類似于用于執(zhí)行乘法運(yùn)算的星號(hào)。星號(hào)將變量標(biāo)記為指針。

這是C++中有效指針聲明的一個(gè)例子:

    int    *x;    // a pointer to integer
    double *x;    // a pointer to double
    float  *x;    // a pointer to float
    char   *ch     // a pointer to a character

    引用運(yùn)算符(&;)和遵從運(yùn)算符(*)

    引用運(yùn)算符(&;)返回變量的地址。

    解引用運(yùn)算符(*)幫助我們獲取存儲(chǔ)在內(nèi)存地址中的值。

    例如:

    如果我們有一個(gè)名為num的變量,存儲(chǔ)在地址0x234中,并存儲(chǔ)值28。

    引用運(yùn)算符(&;)將返回0x234。

    解引用運(yùn)算符(*)將返回5。

    例1:

    #include <iostream>
    int main() {
    int  x = 27;  
    int  *ip;        
    ip = &x;      
    cout << "Value of x is : ";
    cout << x << endl;
    cout << "Value of ip is : ";
    cout << ip<< endl;
    cout << "Value of *ip is : ";
    cout << *ip << endl;
    return 0;
    }

    輸出:

     

    工作原理:

     

    以下是代碼截圖:

     

    代碼說明:

  1. 導(dǎo)入iostream頭文件。這將允許我們使用頭文件中定義的函數(shù)而不會(huì)出錯(cuò)。

  2. 包含std名稱空間以使用其類而不調(diào)用它。

  3. 調(diào)用main()函數(shù)。程序邏輯應(yīng)添加在此函數(shù)體中。{標(biāo)記函數(shù)體的開始。

  4. 聲明一個(gè)整數(shù)變量x并將其賦值為27。

  5. 聲明指針變量*ip。

  6. 將變量x的地址存儲(chǔ)在指針變量中。

  7. 在控制臺(tái)上打印一些文本。

  8. 在屏幕上打印變量x的值。

  9. 在控制臺(tái)上打印一些文本。

  10. 打印變量x的地址。地址值存儲(chǔ)在變量ip中。

  11. 在控制臺(tái)上打印一些文本。

  12. 打印存儲(chǔ)在指針地址的值。

  13. 程序成功執(zhí)行后應(yīng)返回值。

  14. main()函數(shù)主體的結(jié)尾。

    指針和數(shù)組

    數(shù)組和指針基于相關(guān)概念工作。在使用具有指針的數(shù)組時(shí),需要注意的事情不盡相同。數(shù)組名稱本身表示數(shù)組的基址。這意味著要將數(shù)組地址分配給指針,不應(yīng)使用與號(hào)(&;)。

    例如:

    p = arr;

    以上是正確的,因?yàn)閍rr表示數(shù)組的地址。下面是另一個(gè)例子:

    p = &arr;

    以上不正確。

    我們可以隱式地將數(shù)組轉(zhuǎn)換為指針。例如:

    int arr [20];
    int * ip;

    以下是有效操作:

    ip = arr;

    在上述聲明之后,ip和arr將是等價(jià)的,并且它們將共享屬性。但是,可以將不同的地址分配給ip,但我們不能將任何內(nèi)容分配給arr

    例2:

    此示例演示如何使用指針遍歷數(shù)組:

    #include <iostream>
    int main() {
    int *ip;
    int arr[] = { 10, 34, 13, 76, 5, 46 };
    ip = arr;
    for (int x = 0; x < 6; x++) {
    cout << *ip << endl;
    ip++;
    }
    return 0;
    }

    輸出:

     

    以下是代碼截圖:

     

    代碼說明:

  1. 聲明整數(shù)指針變量ip。

  2. 聲明一個(gè)名為arr的數(shù)組,并在其中存儲(chǔ)6個(gè)整數(shù)。

  3. 將arr分配給ip。ip和arr將變得等效。

  4. 創(chuàng)建for循環(huán)。創(chuàng)建循環(huán)變量x是為了迭代索引0到5的數(shù)組元素。

  5. 打印存儲(chǔ)在指針I(yè)P地址的值。每次迭代將返回一個(gè)值,總共重復(fù)6次。Endl是一個(gè)C++的關(guān)鍵字,它是結(jié)束線。此操作允許您在打印每個(gè)值后將光標(biāo)移動(dòng)到下一行。每個(gè)值將打印在一行中。

  6. 在每次迭代后將指針移動(dòng)到下一個(gè)int位置。

  7. 循環(huán)結(jié)束。

  8. 程序必須在成功執(zhí)行時(shí)返回某些內(nèi)容。

  9. main()函數(shù)體的結(jié)尾。

    空指針

    如果沒有要分配的確切地址,則可以為指針變量分配NULL。應(yīng)該在申報(bào)的時(shí)候做。這種指針稱為空指針。它的值為零,并且在許多標(biāo)準(zhǔn)庫(如iostream)中定義。

    例3:

    #include <iostream>
    int main() {
    int  *ip = NULL;
    cout << "Value of ip is: " << ip;
    return 0;
    }

    輸出:

     

    以下是代碼截圖:

     

    代碼說明:

  1. 聲明指針變量ip并為其賦值NULL。

  2. 在控制臺(tái)上打印指針變量ip的值和一些文本。

  3. 程序成功完成后必須返回值。

  4. main()函數(shù)主體的結(jié)尾。

    變量指針

    C++,可以直接從計(jì)算機(jī)的內(nèi)存中操作數(shù)據(jù)。

    可以根據(jù)需要分配或重新分配存儲(chǔ)空間。這是通過指針變量實(shí)現(xiàn)的。

    指針變量指向計(jì)算機(jī)內(nèi)存中由另一個(gè)變量指向的特定地址。

    可聲明如下:

    int *p;

    或者

    int* p;

    在you示例中,我們聲明了指針變量p

    它將保存一個(gè)內(nèi)存地址。

    星號(hào)是解引用運(yùn)算符,表示指向的指針。

    指針p指向內(nèi)存地址中的整數(shù)值。

    例4:

    #include <iostream>
    int main() {
    int *p, x = 30;
    p = &x;
    cout << "Value of x is: " << *p;
    return 0;
    }

    輸出:

       

    以下是代碼截圖:

     

    代碼說明:

  1. 聲明一個(gè)指針變量p和一個(gè)值為30的變量x。

  2. 將變量x的地址指定給p。

  3. 在控制臺(tái)上打印指針變量p的值和一些文本。

  4. 程序成功完成后必須返回值。

  5. main()函數(shù)主體的結(jié)尾。

    指針的應(yīng)用

  • <> C++中的函數(shù)只能返回一個(gè)值。此外,函數(shù)中聲明的所有變量都在函數(shù)調(diào)用堆棧中分配。一旦函數(shù)返回,所有堆棧變量都將被銷毀。


  • 函數(shù)的參數(shù)是通過值傳遞的,對(duì)變量所做的任何修改都不會(huì)改變傳遞的實(shí)際變量的值。下面的例子有助于說明這一點(diǎn)概念:-

    例5:

    #includeusing namespace std;
    void test(int*, int*);
    int main() {
    int a = 5, b = 5;
    cout << "Before changing:" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    test(&a, &b);

    cout << "nAfter changing" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
    }

    void test(int* n1, int* n2) {
    *n1 = 10;
    *n2 = 11;
    }

    輸出:

       

    以下是代碼截圖:

       

    代碼說明:

  1. 創(chuàng)建一個(gè)名為test的函數(shù)原型,該函數(shù)將接受兩個(gè)整數(shù)參數(shù)。

  2. 調(diào)用main()函數(shù)。我們將在其主體中添加程序邏輯。

  3. 聲明兩個(gè)整型變量a和b,每個(gè)變量的值為5。

  4. 在控制臺(tái)上打印一些文本。endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  5. 在控制臺(tái)上將變量a的值與其他文本一起打印。endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  6. 在控制臺(tái)上打印變量b的值和其他文本。endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  7. 創(chuàng)建一個(gè)名為test()的函數(shù),將變量a和b的地址作為參數(shù)。

  8. 在控制臺(tái)上打印一些文本。在打印文本之前,| n將創(chuàng)建一個(gè)新的空行。文本打印后,endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  9. 在控制臺(tái)上將變量a的值與其他文本一起打印。endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  10. 在控制臺(tái)上打印變量b的值和其他文本。endl(結(jié)束行)將移動(dòng)光標(biāo)開始下一行的打印。

  11. 程序成功完成后必須返回值。

  12. main()函數(shù)主體的結(jié)尾。

  13. 定義函數(shù)test()。函數(shù)應(yīng)該采用兩個(gè)整數(shù)指針變量*n1和*n2。

  14. 將指針變量*n1賦值為10。

  15. 將指針變量*n2賦值為11。

  16. 函數(shù)測(cè)試()正文結(jié)束。

    即使在函數(shù)測(cè)試中為變量a和b分配了新的值,但一旦函數(shù)調(diào)用完成,外部函數(shù)main也不會(huì)反映出相同的值。

    使用指針作為函數(shù)參數(shù)有助于在函數(shù)中傳遞變量的實(shí)際地址,對(duì)變量執(zhí)行的所有更改都將反映在外部函數(shù)中。

    在上述情況下,函數(shù)“test”具有變量“a”和“b”的地址。這兩個(gè)變量可以從函數(shù)“test”直接訪問,因此對(duì)這些變量所做的任何更改都會(huì)反映在調(diào)用方函數(shù)“main”中

    使用指針的優(yōu)點(diǎn)

    下面是使用指針的優(yōu)點(diǎn)/好處

    • 指針是存儲(chǔ)C++中其他變量地址的變量。

    • 函數(shù)可以使用指針修改和返回多個(gè)變量。

    • 可以使用指針動(dòng)態(tài)分配和取消分配內(nèi)存。

    • 指針有助于簡(jiǎn)化程序的復(fù)雜性。

    • 使用指針可以提高程序的執(zhí)行速度。

    總結(jié):

  • 指針是指保存另一個(gè)變量地址的變量。

  • 每個(gè)指針都有一個(gè)有效的數(shù)據(jù)類型。

  • 指針是內(nèi)存地址的符號(hào)表示。

  • 指針允許程序模擬引用調(diào)用,并創(chuàng)建和操作動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。

  • 數(shù)組和指針使用相關(guān)概念。

  • 數(shù)組名稱表示數(shù)組的基。

  • 如果要將數(shù)組地址分配給指針,請(qǐng)不要使用與號(hào)(&;)。

  • 如果沒有指定的地址來指定指針變量,請(qǐng)將其指定為NULL。