C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

C++ 數(shù)組 & 字符串

C++ 數(shù)據(jù)結(jié)構(gòu)

C++ 類 & 對象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊

C++ 指針

在本文中,您將學(xué)習(xí)有關(guān)指針的所有知識。您將學(xué)習(xí)如何將值存儲在計算機中以及如何使用指針訪問它們。

指針是C++的強大特性,它將C++與其他編程語言(如Java和Python)區(qū)分開來。

指針在C ++程序中用于訪問內(nèi)存和操縱地址。

C ++地址

要了解指針,您首先應(yīng)該知道如何在計算機上存儲數(shù)據(jù)。

在程序中創(chuàng)建的每個變量都在計算機內(nèi)存中分配了一個位置。變量存儲的值實際上存儲在指定的位置中。

為了知道數(shù)據(jù)存儲在哪里,C++有一個&操作符。操作符& (reference)給出變量占用的地址。

如果var是變量,則&var給出該變量的地址。

示例1:C ++中的地址

#include <iostream>
using namespace std;

int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

輸出結(jié)果

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

注意: 在您的系統(tǒng)上可能不會得到相同的結(jié)果。

開頭的0x表示地址為十六進制格式。

請注意,第一個地址與第二個地址相差4個字節(jié),第二個地址與第三個地址相差4個字節(jié)。

這是因為在64位系統(tǒng)中,整數(shù)(類型為int的變量)的大小為4個字節(jié)。

指針變量

C ++使您能夠直接操作計算機內(nèi)存中的數(shù)據(jù)。 您可以根據(jù)需要分配和取消分配內(nèi)存中的任何空間。 這是使用Pointer(指針)變量完成的。

指針變量是指向內(nèi)存中另一個變量所指向的特定地址的變量。

如何聲明一個指針?

int *p;
      或,
int* p;

上面的語句定義了一個指針變量p。它保存了內(nèi)存地址

星號(*)是解引用運算符,表示指向的指針

在這里,指針p是指向int的指針,即它指向存儲器地址中的整數(shù)值。

引用運算符(&)和引用運算符(*)

如上所述的引用運算符(&)給出了變量的地址。

要獲取存儲在內(nèi)存地址中的值,我們使用解引用運算符(*)。

例如:如果number變量存儲在內(nèi)存地址0x123中,并且它包含一個值5。

reference(&)操作符給出值0x123,而dereference(*)操作符給出值5。

注意:注意:c++指針聲明中使用的(*)符號不是引用指針。它只是一個創(chuàng)建指針的類似符號。

示例2:C ++指針

C ++程序演示了指針的工作。

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;

    pc = &c;    // 指針pc保存變量c的內(nèi)存地址
    cout << "pc持有的指針地址(pc): "<< pc << endl;
    cout << "地址指針pc持有的值(*pc): " << *pc << endl << endl;
    
    c = 11;    // 內(nèi)存地址&c中的值從5更改為11。
    cout << "地址指針pc持有(pc): " << pc << endl;
    cout << "地址指針pc持有的內(nèi)容(*pc): " << *pc << endl << endl;

    *pc = 2; 
    cout << "Address of c (&c): " << &c << endl;
    cout << "Value of c (c): " << c << endl << endl;

    return 0;
}

輸出結(jié)果

Address of c (&c): 0046FD44
Value of c (c): 5

pc持有的指針地址(pc): 0046F
地址指針pc持有的值(*pc): 5

地址指針pc持有(pc): 0046FD4
地址指針pc持有的內(nèi)容(*pc):

Address of c (&c): 0046FD44
Value of c (c): 2

C ++編程中指針的工作

程序的用法說明

  • 當(dāng)c = 5;值5存儲在變量c-0x7fff5fbff8c 的地址中。

  • 當(dāng)pc = &c;指針pc的地址為c-0x7fff5fbff8c時,表達式(解引用運算符)*pc輸出存儲在該地址中的值5。

  • 當(dāng)c = 11;由于pc持有的地址指針與c - 0x7fff5fbff8c相同,所以當(dāng)執(zhí)行表達式*pc時,c的值也會發(fā)生變化,現(xiàn)在輸出11。

  • 當(dāng)*pc = 2時;它改變了pc - 0x7fff5fbff8c存儲的地址的內(nèi)容。這個從11變成了2。因此,當(dāng)我們輸出c的值時,這個值也是2。

使用指針時的常見錯誤

假設(shè)您希望指針pc指向c的地址。然后,

int c, *pc;
pc=c;  /* 錯誤!  pc是地址,而c不是地址。 */
*pc=&c; /*錯誤!  * pc是地址指向的值,而&c是地址。*/
pc=&c; /* 正確!  pc是一個地址,&c也是一個地址。 */
*pc=c; /* 正確!  * pc是地址指向的值,而c也是一個值。 */

在這兩種情況下,指針pc都不是指向c的地址。

您還應(yīng)該查看這些與指針相關(guān)的教程:

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清