C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

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

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

C++ 類 & 對(duì)象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊(cè)

C++ 指針和數(shù)組

在本文中,您將了解數(shù)組與指針之間的關(guān)系,并在程序中有效地使用它們。

指針是保存地址的變量。指針不僅可以存儲(chǔ)單個(gè)變量的地址,還可以存儲(chǔ)數(shù)組單元的地址。

看以下示例:

int* ptr;
int a[5];
ptr = &a[2];  // &a[2]是a[5]的第三個(gè)元素的地址。

指向數(shù)組單元格的指針

假設(shè)指針需要指向數(shù)組的第四個(gè)元素,即在上述情況下的第四個(gè)數(shù)組元素的保存地址。

由于ptr指向上面示例中的第三個(gè)元素,ptr + 1將指向第四個(gè)元素。

您可能會(huì)認(rèn)為,ptr +1為您提供了ptr的下一個(gè)字節(jié)的地址。 但這是不正確的。

這是因?yàn)橹羔榩tr是指向int的指針,并且int的大小對(duì)于操作系統(tǒng)是固定的(64位操作系統(tǒng)中int類型大小是4字節(jié))。 因此,ptr和ptr +1之間的地址相差4個(gè)字節(jié)。

如果指針ptr是指向char的指針,那么ptr和ptr + 1之間的地址將相差1個(gè)字節(jié),因?yàn)橐粋€(gè)字符的大小是1個(gè)字節(jié)。

示例1:C ++指針和數(shù)組

C ++程序使用數(shù)組和指針顯示數(shù)組元素的地址

#include <iostream>
using namespace std;

int main()
{
    float arr[5];
    float *ptr;
    
    cout << "使用數(shù)組顯示地址: " << endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }

    // ptr = &arr[0]
    ptr = arr;

    cout<<"\n使用指針顯示地址: "<< endl;
    for (int i = 0; i < 5; ++i)
    {
        cout << "ptr + " << i << " = "<< ptr + i << endl;
    }

    return 0;
}

輸出結(jié)果

使用數(shù)組顯示地址:
&arr[0] = 0015F718
&arr[1] = 0015F71C
&arr[2] = 0015F720
&arr[3] = 0015F724
&arr[4] = 0015F728

使用指針顯示地址:
ptr + 0 = 0015F718
ptr + 1 = 0015F71C
ptr + 2 = 0015F720
ptr + 3 = 0015F724
ptr + 4 = 0015F728

在上面的程序中,使用不同的指針ptr來(lái)顯示數(shù)組元素arr的地址。

但是,數(shù)組元素可以通過(guò)使用相同的數(shù)組名arr來(lái)使用指針表示法來(lái)訪問(wèn)。例如:

int arr[3];

&arr[0] 等同于 arr
&arr[1] 等同于 arr + 1
&arr[2] 等同于 arr + 2

示例2:指針和數(shù)組

C ++程序使用指針?lè)?hào)顯示數(shù)組元素的地址。

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
    cout<<"使用指針?lè)?hào)顯示地址: "<< endl;
    for (int i = 0; i < 5; ++i) {
        cout << arr + i <<endl;
    }

    return 0;
}

輸出結(jié)果

使用指針?lè)?hào)顯示地址:
045FB90
045FB94
045FB98
045FB9C
045FBA0

您知道,指針ptr保存地址,而表達(dá)式*ptr給出存儲(chǔ)在地址中的值。

類似地,可以使用*(ptr + 1)獲取存儲(chǔ)在指針ptr + 1中的值。

請(qǐng)考慮以下代碼:

int ptr[5] = {3, 4, 5, 5, 3};
  • &ptr[0]等于ptr,*ptr等于ptr[0]

  • &ptr[1]等于ptr + 1,*(ptr + 1) 等于ptr[1]

  • &ptr[2]等于ptr + 2,*(ptr + 2)等于ptr[2]

  • &ptr[i]等于ptr + i ,*(ptr + i)等于ptr[i]

示例3:C ++指針和數(shù)組

C ++程序,用于插入和顯示使用指針?lè)?hào)輸入的數(shù)據(jù)。

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // 使用指針?lè)?hào)插入數(shù)據(jù)
    cout << "輸入5個(gè)數(shù)字: ";
    for (int i = 0; i < 5; ++i) {
        cin >> *(arr + i) ;
    }

    // 使用指針?lè)?hào)顯示數(shù)據(jù)
    cout << "顯示數(shù)據(jù): " << endl;
    for (int i = 0; i < 5; ++i) {
        cout << *(arr + i) << endl ;
    }

    return 0;
}

輸出結(jié)果

輸入5個(gè)數(shù)字: 125
145
180
225
335
顯示數(shù)據(jù):
125
145
180
225
335
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清