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

Inisialisasi Array Pointer yang Mudah di C:Tips &Praktik Terbaik

Pointer adalah variabel yang menyimpan alamat variabel lain. Nama variabel pointer harus diawali dengan simbol “*”. Sama seperti dalam kasus variabel normal, kita juga dapat mendeklarasikan "array of pointer", di mana setiap subskrip dari array menyimpan alamat dari tipe array.

Bagaimana Menginisialisasi Array Pointer di C?

Variabel penunjuk dapat diinisialisasi pada saat deklarasi, dengan menugaskannya ke alamat variabel yang ada. Cuplikan berikut menunjukkan bagaimana Anda dapat menginisialisasi pointer −

int x = 10;
int *y = &x;

Secara default, semua variabel termasuk variabel penunjuk termasuk dalam "kelas penyimpanan otomatis". Artinya, variabel penunjuk akan menyimpan alamat memori acak yang tidak dapat diprediksi, sampah, yang dapat menyebabkan perilaku tidak terdefinisi dan potensi risiko pada program, seperti kesalahan kesalahan segmentasi. Oleh karena itu, ini harus diinisialisasi ke NULL jika kita tidak memiliki nilai spesifik untuk disimpan pada saat deklarasi.

int *ptr = NULL;

Sebuah "array penunjuk" menyimpan alamat di setiap elemen. Tipe array harus sesuai dengan tipe variabel target.

Inisialisasi Array Pointer Menggunakan Kata Kunci statis

Anda juga dapat menggunakan kata kunci static untuk menginisialisasi array pointer untuk menyimpan "0" di setiap subskrip.

Contoh

#include <stdio.h>
int main(){
 static int *ptr[5];
 for (int i = 0; i < 5; i++){
 printf("ptr[%d] = %d\n", i, ptr[i]); 
 }
 
 return 0;
}

Keluaran

Jalankan kode dan periksa hasilnya −

ptr[0]= 0
ptr[1]= 0
ptr[2]= 0
ptr[3]= 0
ptr[4]= 0

Inisialisasi Array Pointer Integer

Di sini, kami mendeklarasikan array pointer integer dan menyimpan alamat tiga variabel integer.

Contoh

#include <stdio.h>
int main(){
 int a = 10, b = 20, c = 30;
 int *ptr[3] = {&a, &b, &c};
 for (int i = 0; i < 3; i++){
 printf("ptr[%d]: address: %d value: %d\n", i, ptr[i], *ptr[i]);
 }
 
 return 0;
} 

Keluaran

Jalankan kode dan periksa hasilnya −

ptr[0]: address: 6422040 value: 10
ptr[1]: address: 6422036 value: 20
ptr[2]: address: 6422032 value: 30

Inisialisasi Array Pointer berdasarkan Alamat Langsung

Kita dapat menyimpan alamat setiap elemen array normal di elemen array pointer yang sesuai.

Contoh

#include <stdio.h>
int main(){
 int arr[] = {10, 20, 30};
 int *ptr[3] = {&arr[0], &arr[1], &arr[2]};
 for (int i = 0; i < 3; i++){
 printf("ptr[%d]: address: %d value: %d\n", i, ptr[i], *ptr[i]);
 }
 
 return 0;
}

Keluaran

Jalankan kode dan periksa hasilnya −

ptr[0]: address: 6422032 value: 10
ptr[1]: address: 6422036 value: 20
ptr[2]: address: 6422040 value: 30

Melintasi Array dengan Alamat Basisnya

Saat kita mendapatkan alamat dasar sebuah array (dalam hal ini "&arr[0]"), kita bisa mendapatkan alamat elemen berikutnya, dengan mengetahui bahwa penunjuk bertambah sesuai dengan ukuran tipe datanya.

Oleh karena itu, hanya dengan alamat dasar (nama array sama dengan alamat elemen ke-0), kita dapat melintasi array.

Contoh 1

Lihatlah contoh berikut −

#include <stdio.h>
int main(){
 int arr[] = {10, 20, 30};
 int *ptr=arr;
 for (int i = 0; i < 3; i++){
 printf("ptr[%d]: address: %d value: %d\n", i,ptr+i, *(ptr+i));
 }
 
 return 0;
}

Keluaran

Jalankan kode dan periksa hasilnya −

ptr[0]: address: 6422020 value: 10
ptr[1]: address: 6422024 value: 20
ptr[2]: address: 6422028 value: 30

Contoh 2:Melintasi Array 2D menggunakan Array Pointer

Dalam contoh ini, kita memiliki array 2D. Alamat elemen ke-0 setiap baris disimpan dalam array pointer. Saat melintasi, alamat disimpan di setiap elemen larik penunjuk, yang menunjuk ke elemen ke-0 dari baris terkait, masing-masing bertambah untuk mengambil nilai di setiap baris.

#include <stdio.h>
int main(){
 // 2d array
 int arr[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 };
 int ROWS = 2, COLS = 4;
 int i, j;
 // pointer
 int (*ptr)[4] = arr;
 // print the element of the array via pointer ptr
 for (i = 0; i < ROWS; i++) {
 for (j = 0; j < COLS; j++) {
 printf("%d ", *(ptr[i]+j));
 }
 printf("\n");
 }
 
 return 0;
}

Keluaran

Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −

1 2 3 4 
5 6 7 8

Contoh 3

Kita tidak benar-benar memerlukan array penunjuk di sini, karena kita dapat menggunakan nama array 2D ini sebagai penunjuk dasarnya, dan menaikkannya berdasarkan baris dan kolom untuk mengambil elemen dalam array 2D yang diberikan −

#include <stdio.h>
int main(){
 // 2d array
 int arr[3][4] = {
 {1, 2, 3, 4},
 {5, 6, 7, 8},
 };
 int ROWS = 2, COLS = 4;
 int i, j;
 // pointer
 int *ptr = arr;
 // print the element of the array via pointer ptr
 for (i = 0; i < ROWS; i++){
 for (j = 0; j < COLS; j++){
 printf("%d ", *(ptr + i * COLS + j));
 }
 printf("\n");
 }
 
 return 0;
}

Keluaran

Outputnya menyerupai kode sebelumnya −

1 2 3 4 
5 6 7 8

Inisialisasi Array Penunjuk Karakter (String)

Dalam pemrograman C, string adalah array bertipe data char. Karena nama array juga mewakili alamat elemen ke-0, string dapat dideklarasikan sebagai −

char arr[] = "Hello";

Dengan menggunakan notasi penunjuk, sebuah string ditetapkan ke penunjuk karakter sebagai −

char *arr = "Hello";

Kita kemudian dapat mendeklarasikan array pointer char untuk menyimpan banyak string sebagai berikut −

char *arr[3] = {"string1", "string2", "string3", . . . };

Contoh

Contoh berikut memiliki array pointer char yang digunakan untuk menyimpan nama bahasa komputer −

#include <stdio.h>
int main(){
 char *langs [10] = {
 "PYTHON", "JAVASCRIPT", "PHP",
 "NODE JS", "HTML", "KOTLIN", "C++",
 "REACT JS", "RUST", "VBSCRIPT"
 };
 for(int i = 0; i < 10; i++)
 printf("%s\n", langs[i]);
 return 0;
}

Keluaran

Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −

PYTHON
JAVASCRIPT
PHP
NODE JS
HTML
KOTLIN
C++
REACT JS
RUST
VBSCRIPT

Dalam program ini, "langs" adalah penunjuk ke array yang terdiri dari 10 string. Oleh karena itu, jika "langs[0]" menunjuk ke alamat 5000, maka "langs + 1" akan menunjuk ke alamat 5004 yang menyimpan pointer ke string kedua.

Oleh karena itu, kita juga dapat menggunakan variasi loop berikut untuk mencetak array string −

for (int i = 0; i < 10; i++){
 printf("%s\n", *(langs + i));
}

Inisialisasi Array Pointer Dinamis

Anda dapat menggunakan fungsi malloc() untuk mendeklarasikan dan menginisialisasi array pointer secara dinamis.

Contoh

Lihatlah contoh berikut −

#include <stdio.h>
int main(){
 int *arr = (int *)malloc (sizeof (int) * 5); 
 for(int i = 0; i < 5; i++){
 arr[i] = i;
 }
 for (int x = 0; x < 5; x++){
 printf("%d %d\n", x, arr[x]);
 }
 
 return 0;
}

Keluaran

Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −

0 0
1 1
2 2
3 3
4 4

Anda bahkan dapat meminta masukan pengguna dan menetapkan nilai ke elemen dalam penunjuk array −

for(i = 0; i < 5; i++){
 scanf("%d", &x);
 arr[i] = x;
}

Bahasa C

  1. Fungsi Pointer dalam Pemrograman C dengan Contoh
  2. Pemrograman Web C++
  3. C++ Multiple, Multilevel dan Hierarchical Inheritance
  4. realloc() Fungsi di C Library:Bagaimana cara menggunakannya? Sintaks &Contoh
  5. Pernyataan pengambilan keputusan C++
  6. C++ untuk Loop
  7. Abstraksi Data dalam C++
  8. C - Bidang Bit
  9. Akun Microsoft:Akses &Manajemen Aman
  10. C - Tipe Data