C Pointer (Dengan Contoh)

Dalam tutorial ini, Anda akan belajar tentang pointer; apa itu petunjuk, bagaimana Anda menggunakannya dan kesalahan umum yang mungkin Anda hadapi saat mengerjakannya dengan bantuan contoh.

Pointer adalah fitur canggih dari pemrograman C dan C ++. Sebelum kita mempelajari pointer, mari kita pelajari tentang alamat dalam pemrograman C.

Alamat di C

Jika Anda memiliki variabel var dalam program Anda, Anda &varakan mendapatkan alamatnya di memori.

Kami telah menggunakan alamat berkali-kali saat menggunakan scanf()fungsi tersebut.

 scanf("%d", &var);

Di sini, nilai yang dimasukkan oleh pengguna disimpan di alamat variabel var. Mari kita ambil contoh yang berfungsi.

 #include int main() ( int var = 5; printf("var: %d", var); // Notice the use of & before var printf("address of var: %p", &var); return 0; ) 

Keluaran

 var: 5 alamat var: 2686778

Catatan: Anda mungkin akan mendapatkan alamat yang berbeda saat menjalankan kode di atas.

C Pointer

Pointer (variabel penunjuk) adalah variabel khusus yang digunakan untuk menyimpan alamat, bukan nilai.

Sintaks Pointer

Inilah cara kita mendeklarasikan pointer.

 int* p;

Di sini, kami telah mendeklarasikan pointer inttipe p .

Anda juga dapat mendeklarasikan pointer dengan cara berikut.

 int *p1; int * p2; 

Mari kita ambil contoh lain untuk mendeklarasikan pointer.

 int* p1, p2;

Di sini, kami telah mendeklarasikan pointer p1 dan variabel normal p2.

Menetapkan alamat ke Pointer

Mari kita ambil contoh.

 int* pc, c; c = 5; pc = &c; 

Di sini, 5 ditugaskan ke variabel c. Dan, alamat c ditetapkan ke penunjuk pc.

Dapatkan Value of Thing yang Ditunjuk oleh Pointer

Untuk mendapatkan nilai dari benda yang ditunjukkan oleh petunjuk, kami menggunakan *operator. Sebagai contoh:

 int* pc, c; c = 5; pc = &c; printf("%d", *pc); // Output: 5

Di sini, alamat cditetapkan ke penunjuk pc. Untuk mendapatkan nilai yang disimpan di alamat itu, kami menggunakan * pc.

Catatan: Dalam contoh di atas, pc adalah pointer, bukan *pc. Anda tidak dapat dan tidak boleh melakukan sesuatu seperti *pc = &c;

Omong-omong, *disebut operator dereferensi (saat bekerja dengan pointer). Ini beroperasi pada penunjuk dan memberikan nilai yang disimpan di penunjuk itu.

Mengubah Nilai yang Ditunjuk oleh Pointer

Mari kita ambil contoh.

 int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // Output: 1 printf("%d", *pc); // Ouptut: 1

Kami telah menetapkan alamat c ke penunjuk pc.

Kemudian, kami mengubah nilai c menjadi 1. Karena pc dan alamat c sama, *pcmemberi kami 1.

Mari kita ambil contoh lain.

 int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // Ouptut: 1 printf("%d", c); // Output: 1 

Kami telah menetapkan alamat c ke penunjuk pc.

Kemudian, kami mengubah *pcmenjadi 1 menggunakan *pc = 1;. Karena pc dan alamat c sama, c akan sama dengan 1.

Mari kita ambil satu contoh lagi.

 int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // Output: 5 pc = &d; printf("%d", *pc); // Ouptut: -15

Awalnya, alamat c ditugaskan ke penunjuk pc menggunakan pc = &c;. Karena c adalah 5, *pcberikan kita 5.

Kemudian, alamat d ditetapkan ke penunjuk pc menggunakan pc = &d;. Karena d adalah -15, *pcberikan kita -15.

Contoh: Bekerja dari Pointer

Mari kita ambil contoh yang berfungsi.

 #include int main() ( int* pc, c; c = 22; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 22 pc = &c; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 22 c = 11; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 11 *pc = 2; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 2 return 0; ) 

Keluaran

 Alamat c: 2686784 Nilai c: 22 Alamat penunjuk pc: 2686784 Isi penunjuk pc: 22 Alamat penunjuk pc: 2686784 Isi penunjuk pc: 11 Alamat c: 2686784 Nilai c: 2 

Penjelasan program

  1. int* pc, c;

    Here, a pointer pc and a normal variable c, both of type int, is created.
    Since pc and c are not initialized at initially, pointer pc points to either no address or a random address. And, variable c has an address but contains random garbage value.
  2. c = 22;

    This assigns 22 to the variable c. That is, 22 is stored in the memory location of variable c.
  3. pc = &c;

    This assigns the address of variable c to the pointer pc.
  4. c = 11;

    This assigns 11 to variable c.
  5. *pc = 2;

    This change the value at the memory location pointed by the pointer pc to 2.

Common mistakes when working with pointers

Suppose, you want pointer pc to point to the address of c. Then,

 int c, *pc; // pc is address but c is not pc = c; // Error // &c is address but *pc is not *pc = &c; // Error // both &c and pc are addresses pc = &c; // both c and *pc values *pc = c;

Here's an example of pointer syntax beginners often find confusing.

 #include int main() ( int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; )

Why didn't we get an error when using int *p = &c;?

It's because

 int *p = &c;

is equivalent to

 int *p: p = &c;

Dalam kedua kasus, kami membuat penunjuk p(bukan *p) dan menetapkannya &c.

Untuk menghindari kebingungan ini, kita dapat menggunakan pernyataan seperti ini:

 int* p = &c;

Sekarang Anda tahu apa itu pointer, Anda akan mempelajari bagaimana pointer terkait dengan array di tutorial berikutnya.

Artikel yang menarik...