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

C Pointer

Penunjuk C

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

Penunjuk 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, &var akan memberi Anda alamatnya di memori.

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

scanf("%d", &var);

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

#include <stdio.h>
int main()
{
  int var = 5;
  printf("var: %d\n", var);

  // Notice the use of & before var
  printf("address of var: %p", &var);  
  return 0;
}

Keluaran

var: 5 
address of var: 2686778

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


Penunjuk C

Pointer (variabel pointer) adalah variabel khusus yang digunakan untuk menyimpan alamat daripada nilai.

Sintaks Penunjuk

Inilah cara kita mendeklarasikan pointer.

int* p;

Di sini, kita telah mendeklarasikan sebuah pointer p dari int ketik.

Anda juga dapat mendeklarasikan pointer dengan cara ini.

int *p1;
int * p2;

Mari kita ambil contoh lain untuk mendeklarasikan pointer.

int* p1, p2;

Di sini, kita telah mendeklarasikan sebuah 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 c variabel. Dan, alamat c ditugaskan ke pc penunjuk.


Dapatkan Nilai Hal yang Ditunjuk oleh Pointer

Untuk mendapatkan nilai benda yang ditunjuk oleh pointer, kita menggunakan * operator. Misalnya:

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

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

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

Omong-omong, * disebut operator dereference (ketika bekerja dengan pointer). Ini beroperasi pada pointer dan memberikan nilai yang disimpan dalam pointer 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 pc penunjuk.

Kemudian, kami mengubah nilai c ke 1. Sejak pc dan alamat c adalah sama, *pc memberi kita 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 pc penunjuk.

Kemudian, kami mengubah *pc ke 1 menggunakan *pc = 1; . Sejak pc dan alamat c adalah 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 pc penunjuk menggunakan pc = &c; . Sejak c adalah 5, *pc memberi kita 5.

Kemudian, alamat d ditugaskan ke pc penunjuk menggunakan pc = &d; . Sejak d adalah -15, *pc memberi kita -15.


Contoh:Cara Kerja Pointer

Mari kita ambil contoh kerja.

#include <stdio.h>
int main()
{
   int* pc, c;
   
   c = 22;
   printf("Address of c: %p\n", &c);
   printf("Value of c: %d\n\n", c);  // 22
   
   pc = &c;
   printf("Address of pointer pc: %p\n", pc);
   printf("Content of pointer pc: %d\n\n", *pc); // 22
   
   c = 11;
   printf("Address of pointer pc: %p\n", pc);
   printf("Content of pointer pc: %d\n\n", *pc); // 11
   
   *pc = 2;
   printf("Address of c: %p\n", &c);
   printf("Value of c: %d\n\n", c); // 2
   return 0;
}

Keluaran

Address of c: 2686784
Value of c: 22

Address of pointer pc: 2686784
Content of pointer pc: 22

Address of pointer pc: 2686784
Content of pointer pc: 11

Address of c: 2686784
Value of c: 2

Penjelasan program

  1. int* pc, c;

    Di sini, sebuah pointer pc dan variabel normal c , keduanya ketik int , dibuat.
    Sejak pc dan c tidak diinisialisasi pada awalnya, pointer pc menunjuk ke tidak ada alamat atau alamat acak. Dan, variabel c memiliki alamat tetapi berisi nilai sampah acak.
  2. c = 22;

    Ini menetapkan 22 ke variabel c . Artinya, 22 disimpan di lokasi memori variabel c .
  3. pc = &c;

    Ini memberikan alamat variabel c ke penunjuk pc .
  4. c = 11;

    Ini menetapkan 11 ke variabel c .
  5. *pc = 2;

    Ini mengubah nilai di lokasi memori yang ditunjukkan oleh pointer pc ke 2.

Kesalahan umum saat bekerja dengan pointer

Misalkan, Anda ingin pointer pc untuk menunjuk ke alamat c . Kemudian,

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;  // Not an error

// both c and *pc values 
*pc = c;  // Not an error

Berikut adalah contoh sintaks pointer yang sering membingungkan pemula.

#include <stdio.h>
int main() {
   int c = 5;
   int *p = &c;

   printf("%d", *p);  // 5
   return 0; 
}

Mengapa kami tidak mendapatkan kesalahan saat menggunakan int *p = &c; ?

Itu karena

int *p = &c;

setara dengan

int *p:
p = &c;

Dalam kedua kasus, kami membuat pointer p (bukan *p ) dan menetapkan &c untuk itu.

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.


Bahasa C

  1. C# Hello World - Program C# Pertama Anda
  2. C# Kata Kunci dan Pengidentifikasi
  3. Variabel C# dan Tipe Data (Primitif)
  4. C# Operator
  5. C# Bitwise dan Bit Shift Operator
  6. C# Input dan Output Dasar
  7. C# Ekspresi, Pernyataan, dan Blok (Dengan Contoh)
  8. C# Komentar
  9. C Pointer
  10. Hubungan Antara Array dan Pointer