Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C++ Pointer dan Array

Penunjuk dan Array C++

Dalam tutorial ini, kita akan belajar tentang hubungan antara array dan pointer dengan bantuan contoh.

Dalam C++, Pointer adalah variabel yang menyimpan alamat dari variabel lain. Pointer tidak hanya dapat menyimpan alamat variabel tunggal, tetapi juga dapat menyimpan alamat sel array.

Perhatikan contoh ini:

int *ptr;
int arr[5];

// store the address of the first
// element of arr in ptr
ptr = arr;

Di sini, ptr adalah variabel pointer sementara arr adalah int Himpunan. Kode ptr = arr; menyimpan alamat elemen pertama array dalam variabel ptr .

Perhatikan bahwa kita telah menggunakan arr bukannya &arr[0] . Ini karena keduanya sama. Jadi, kode di bawah ini sama dengan kode di atas.

int *ptr;
int arr[5];
ptr = &arr[0];

Alamat untuk elemen array lainnya diberikan oleh &arr[1] , &arr[2] , &arr[3] , dan &arr[4] .


Arahkan ke Setiap Elemen Array

Misalkan kita perlu menunjuk ke elemen keempat dari array menggunakan pointer yang sama ptr .

Di sini, jika ptr menunjuk ke elemen pertama dalam contoh di atas lalu ptr + 3 akan menunjuk ke elemen keempat. Misalnya,

int *ptr;
int arr[5];
ptr = arr;

ptr + 1 is equivalent to &arr[1];
ptr + 2 is equivalent to &arr[2];
ptr + 3 is equivalent to &arr[3];
ptr + 4 is equivalent to &arr[4];

Demikian pula, kita dapat mengakses elemen menggunakan pointer tunggal. Misalnya,

// use dereference operator
*ptr == arr[0];
*(ptr + 1) is equivalent to arr[1];
*(ptr + 2) is equivalent to arr[2];
*(ptr + 3) is equivalent to arr[3];
*(ptr + 4) is equivalent to arr[4];

Misalkan jika kita telah menginisialisasi ptr = &arr[2]; lalu

ptr - 2 is equivalent to &arr[0];
ptr - 1 is equivalent to &arr[1]; 
ptr + 1 is equivalent to &arr[3];
ptr + 2 is equivalent to &arr[4];

Catatan: Alamat antara ptr dan ptr + 1 berbeda dengan 4 byte. Itu karena ptr adalah penunjuk ke int data. Dan, ukuran int adalah 4 byte dalam sistem operasi 64-bit.

Demikian pula, jika pointer ptr menunjuk ke char ketik data, lalu alamat di antara ptr dan ptr + 1 adalah 1 byte. Itu karena ukuran karakter adalah 1 byte.


Contoh 1:Pointer dan Array C++

// C++ Program to display address of each element of an array 

#include <iostream>
using namespace std;

int main()
{
    float arr[3];

    // declare pointer variable
    float *ptr;
    
    cout << "Displaying address using arrays: " << endl;

    // use for loop to print addresses of all array elements
    for (int i = 0; i < 3; ++i)
    {
        cout << "&arr[" << i << "] = " << &arr[i] << endl;
    }

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

    cout<<"\nDisplaying address using pointers: "<< endl;

    // use for loop to print addresses of all array elements
    // using pointer notation
    for (int i = 0; i < 3; ++i)
    {
        cout << "ptr + " << i << " = "<< ptr + i << endl;
    }

    return 0;
}

Keluaran

Displaying address using arrays: 
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8

Displaying address using pointers: 
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8

Pada program di atas, pertama-tama kita hanya mencetak alamat elemen array tanpa menggunakan variabel pointer ptr .

Kemudian, kami menggunakan pointer ptr untuk menunjuk ke alamat a[0] , ptr + 1 untuk menunjuk ke alamat a[1] , dan seterusnya.


Dalam kebanyakan konteks, nama array membusuk menjadi pointer. Dengan kata sederhana, nama array diubah menjadi pointer. Itulah alasan mengapa kita bisa menggunakan pointer untuk mengakses elemen array.

Namun, kita harus ingat bahwa pointer dan array tidak sama.

Ada beberapa kasus di mana nama array tidak berubah menjadi pointer. Untuk mempelajari lebih lanjut, kunjungi:Kapan nama array tidak berubah menjadi pointer?


Contoh 2:Nama array digunakan sebagai penunjuk

// C++ Program to insert and display data entered by using pointer notation.

#include <iostream>
using namespace std;

int main() {
    float arr[5];
    
   // Insert data using pointer notation
    cout << "Enter 5 numbers: ";
    for (int i = 0; i < 5; ++i) {

        // store input number in arr[i]
        cin >> *(arr + i) ;

    }

    // Display data using pointer notation
    cout << "Displaying data: " << endl;
    for (int i = 0; i < 5; ++i) {

        // display value of arr[i]
        cout << *(arr + i) << endl ;

    }

    return 0;
}

Keluaran

Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data: 
2.5
3.5
4.5
5
2

Di sini,

  1. Kami pertama kali menggunakan notasi pointer untuk menyimpan angka yang dimasukkan oleh pengguna ke dalam array arr .

    cin >> *(arr + i) ;

    Kode ini setara dengan kode di bawah ini:

    cin >> arr[i];

    Perhatikan bahwa kita belum mendeklarasikan variabel pointer terpisah, tetapi kita menggunakan nama array arr untuk notasi penunjuk.

    Seperti yang sudah kita ketahui, nama array arr menunjuk ke elemen pertama dari array. Jadi, kita bisa memikirkan arr bertindak seperti penunjuk.

  2. Demikian pula, kami kemudian menggunakan for loop untuk menampilkan nilai arr menggunakan notasi penunjuk.

    cout << *(arr + i) << endl ;

    Kode ini setara dengan

    cout << arr[i] << endl ;

Bahasa C

  1. Variabel C++, Literal dan Konstanta
  2. Kelas dan Objek C++
  3. Manajemen Memori C++:baru dan hapus
  4. C++ Warisan Publik, Dilindungi, dan Pribadi
  5. Fungsi teman C++ dan Kelas teman
  6. C Pointer
  7. Hubungan Antara Array dan Pointer
  8. C Pass Alamat dan Pointer
  9. C struct dan Pointer
  10. Struktur dan kelas dalam C++