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

Pointer dalam C:Apa itu Pointer dalam Pemrograman C? Jenis

Apa itu Pointer di C?

Penunjuk di C, adalah variabel yang menyimpan alamat dari variabel lain. Pointer juga dapat digunakan untuk merujuk ke fungsi pointer lain. Pointer dapat ditambah/dikurangi, yaitu untuk menunjuk ke lokasi memori berikutnya/sebelumnya. Tujuan penunjuk adalah untuk menghemat ruang memori dan mencapai waktu eksekusi yang lebih cepat.

Cara Menggunakan Pointer di C

Jika kita mendeklarasikan variabel v bertipe int, v sebenarnya akan menyimpan sebuah nilai.

v sama dengan nol sekarang.

Namun, setiap variabel, selain nilai, juga memiliki alamatnya (atau, sederhananya, di mana ia berada di memori). Alamat dapat diambil dengan meletakkan ampersand (&) sebelum nama variabel.

Jika Anda mencetak alamat variabel di layar, itu akan terlihat seperti angka yang benar-benar acak (selain itu, bisa berbeda dari run to run).

Mari kita coba ini dalam praktik dengan pointer dalam contoh C

Keluaran dari program ini adalah -480613588.

Sekarang, apa itu pointer? Alih-alih menyimpan nilai, pointer akan y menyimpan alamat variabel.

Variabel Penunjuk

Int *y =&v;

VARIABLEPOINTERA nilai disimpan dalam bernama penyimpanan/alamat memorivariabel yang menunjuk ke alamat penyimpanan/memori lainnya variabel

Mendeklarasikan Pointer

Seperti variabel, pointer dalam pemrograman C harus dideklarasikan sebelum dapat digunakan dalam program Anda. Pointer dapat diberi nama apa pun yang Anda inginkan selama mereka mematuhi aturan penamaan C. Deklarasi pointer memiliki bentuk sebagai berikut.

data_type * pointer_variable_name;

Di sini,

Mari kita lihat beberapa deklarasi pointer yang valid dalam tutorial pointer C ini:

int    *ptr_thing;            /* pointer to an integer */ 
int *ptr1,thing;/* ptr1 is a pointer to type integer and thing is an integer variable */
double    *ptr2;    /* pointer to a double */
float    *ptr3;      /* pointer to a float */
char    *ch1 ;       /* pointer to a character */
float  *ptr, variable;/*ptr is a pointer to type float and variable is an ordinary float variable */

Inisialisasi pointer

Setelah mendeklarasikan pointer, kita menginisialisasinya seperti variabel standar dengan alamat variabel. Jika pointer dalam pemrograman C tidak diinisialisasi dan digunakan dalam program, hasilnya tidak dapat diprediksi dan berpotensi menimbulkan bencana.

Untuk mendapatkan alamat suatu variabel, kita menggunakan operator ampersand (&) yang diletakkan sebelum nama variabel yang alamatnya kita perlukan. Inisialisasi pointer dilakukan dengan sintaks berikut.

Sintaks Penunjuk

 pointer = &variable;

Sebuah program sederhana untuk ilustrasi pointer diberikan di bawah ini:

#include <stdio.h>
int main()
{
   int a=10;    //variable declaration
   int *p;      //pointer variable declaration
   p=&a;        //store address of variable a in pointer p
   printf("Address stored in a variable p is:%x\n",p);  //accessing the address
   printf("Value stored in a variable p is:%d\n",*p);   //accessing the value
   return 0;
}

Keluaran:

Address stored in a variable p is:60ff08
Value stored in a variable p is:10
Operator Arti * Melayani 2 tujuan

  1. Deklarasi pointer
  2. Mengembalikan nilai variabel yang direferensikan
&Hanya melayani 1 tujuan

Jenis Pointer di C

Berikut ini adalah berbagai Jenis Pointer di C :

Penunjuk Null

Kita dapat membuat pointer null dengan menetapkan nilai null selama deklarasi pointer. Metode ini berguna ketika Anda tidak memiliki alamat yang ditetapkan untuk penunjuk. Pointer null selalu berisi nilai 0.

Program berikut mengilustrasikan penggunaan pointer null:

#include <stdio.h>
int main()
{
	int *p = NULL; 	//null pointer
	printf(“The value inside variable p is:\n%x”,p);
	return 0;
}

Keluaran:

The value inside variable p is:
0

Penunjuk Kosong

Dalam pemrograman C, pointer kosong juga disebut sebagai pointer generik. Itu tidak memiliki tipe data standar. Pointer void dibuat dengan menggunakan kata kunci void. Ini dapat digunakan untuk menyimpan alamat variabel apa pun.

Program berikut mengilustrasikan penggunaan pointer kosong:

#include <stdio.h>
int main()
{
void *p = NULL; 	//void pointer
printf("The size of pointer is:%d\n",sizeof(p));
return 0;
}

Keluaran:

The size of pointer is:4

Penunjuk liar

Pointer dikatakan sebagai pointer liar jika tidak diinisialisasi ke apa pun. Jenis pointer C ini tidak efisien karena mungkin menunjuk ke beberapa lokasi memori yang tidak diketahui yang dapat menyebabkan masalah dalam program kami dan dapat menyebabkan crash pada program. Seseorang harus selalu berhati-hati saat bekerja dengan pointer liar.

Program berikut mengilustrasikan penggunaan penunjuk liar:

#include <stdio.h>
int main()
{
int *p; 	//wild pointer
printf("\n%d",*p);
return 0;
}

Keluaran:

timeout: the monitored command dumped core
sh: line 1: 95298 Segmentation fault      timeout 10s main

Jenis pointer lain di 'c' adalah sebagai berikut:

Penunjuk Akses Langsung dan Tidak Langsung

Di C, ada dua cara yang setara untuk mengakses dan memanipulasi konten variabel

Mari kita pahami ini dengan bantuan program di bawah ini

#include <stdio.h>
/* Declare and initialize an int variable */
int var = 1;
/* Declare a pointer to int */
int *ptr;
int main( void )
{
/* Initialize ptr to point to var */
ptr = &var;
/* Access var directly and indirectly */
printf("\nDirect access, var = %d", var);
printf("\nIndirect access, var = %d", *ptr);
/* Display the address of var two ways */
printf("\n\nThe address of var = %d", &var);
printf("\nThe address of var = %d\n", ptr);
/*change the content of var through the pointer*/
*ptr=48;
printf("\nIndirect access, var = %d", *ptr);
return 0;}

Setelah program dikompilasi tanpa kesalahan, hasilnya adalah:

Direct access, var = 1
Indirect access, var = 1

The address of var = 4202496
The address of var = 4202496

Indirect access, var = 48

Aritmatika Pointer dalam C

Operasi pointer diringkas dalam gambar berikut

Operasi prioritas (diutamakan)

Saat bekerja dengan pointer C, kita harus mematuhi aturan prioritas berikut:

  • Operator * dan &memiliki prioritas yang sama dengan operator unary (negasi!, incrementation++, decrement–).
  • Dalam ekspresi yang sama, operator unary *, &,!, ++, – dievaluasi dari kanan ke kiri.

Jika pointer P menunjuk ke variabel X, maka * P dapat digunakan dimanapun X dapat ditulis.

Ekspresi berikut setara:

int X =10

int *P =&Y;

Untuk kode di atas, ekspresi di bawah ini benar

EkspresiEkivalen EkspresiY=*P+1

*P=*P+10

*P+=2

+***P

(*P)++

Y=X+1

X=X+10

X+=2

++X

X++

Dalam kasus terakhir, tanda kurung diperlukan:karena operator unary * dan ++ dievaluasi dari kanan ke kiri, tanpa tanda kurung penunjuk P akan bertambah, bukan objek yang ditunjuk P.

Tabel di bawah ini menunjukkan operasi aritmatika dan dasar yang dapat digunakan saat menangani pointer C

Operasi Penjelasan Tugas *P1,*P2
P1=P2;
P1 dan P2 menunjuk ke variabel integer yang samaIncrementation dan decrementationInt *P1;
P1++;P1–;Menambahkan offset (Constant)Ini memungkinkan pointer untuk memindahkan N elemen dalam sebuah tabel.
Pointer akan bertambah atau berkurang sebesar N kali jumlah byte (s) dari tipe variabel.
P1+5;

C Pointer &Array dengan Contoh

Secara tradisional, kami mengakses elemen array menggunakan indeksnya, tetapi metode ini dapat dihilangkan dengan menggunakan pointer. Pointer memudahkan untuk mengakses setiap elemen array.

#include <stdio.h>
int main()
{
    int a[5]={1,2,3,4,5};   //array initialization
    int *p;     //pointer declaration
               /*the ptr points to the first element of the array*/

    p=a; /*We can also type simply ptr==&a[0] */
    
    printf("Printing the array elements using pointer\n");
    for(int i=0;i<5;i++)    //loop for traversing array elements
    {
        	printf("\n%x",*p);  //printing array elements
        	p++;    //incrementing to the next element, you can also write p=p+1
    }
    return 0;
}

Keluaran:

1
2
3
4
5

Menambahkan nomor tertentu ke pointer akan memindahkan lokasi pointer ke nilai yang diperoleh dengan operasi penjumlahan. Misalkan p adalah pointer yang saat ini menunjuk ke lokasi memori 0 jika kita melakukan operasi penjumlahan berikut, p+1 maka akan dieksekusi dengan cara ini:

Karena p saat ini menunjuk ke lokasi 0 setelah menambahkan 1, nilainya akan menjadi 1, dan karenanya penunjuk akan menunjuk ke lokasi memori 1.

C Pointer dan String dengan Contoh

String adalah larik objek char, diakhiri dengan karakter null '\ 0'. Kita dapat memanipulasi string menggunakan pointer. Pointer ini dalam contoh C menjelaskan bagian ini

#include <stdio.h>
#include <string.h>
int main()
{
char str[]="Hello Guru99!";
char *p;
p=str;
printf("First character is:%c\n",*p);
p =p+1;
printf("Next character is:%c\n",*p);
printf("Printing all the characters in a string\n");
p=str;  //reset the pointer
for(int i=0;i<strlen(str);i++)
{
printf("%c\n",*p);
p++;
}
return 0;
}

Keluaran:

First character is:H
Next character is:e
Printing all the characters in a string
H
e
l
l
o

G
u
r
u
9
9
!

Cara lain untuk menangani string adalah dengan array pointer seperti pada program berikut:

#include <stdio.h>
int main(){
char *materials[ ] = {  "iron",  "copper",  "gold"};
printf("Please remember these materials :\n");
int i ;
for (i = 0; i < 3; i++) {
  printf("%s\n", materials[ i ]);}
  return 0;}

Keluaran:

Please remember these materials:
iron
copper
gold

Keuntungan Pointer di C

  • Penunjuk berguna untuk mengakses lokasi memori.
  • Penunjuk menyediakan cara yang efisien untuk mengakses elemen struktur array.
  • Penunjuk digunakan untuk alokasi memori dinamis serta dealokasi.
  • Penunjuk digunakan untuk membentuk struktur data yang kompleks seperti daftar tertaut, grafik, pohon, dll.

Kekurangan Pointer di C

  • Penunjuk agak rumit untuk dipahami.
  • Penunjuk dapat menyebabkan berbagai kesalahan seperti kesalahan segmentasi atau dapat mengakses lokasi memori yang tidak diperlukan sama sekali.
  • Jika nilai yang diberikan salah ke pointer, hal itu dapat menyebabkan kerusakan memori.
  • Penunjuk juga bertanggung jawab atas kebocoran memori.
  • Penunjuk relatif lebih lambat daripada variabel.
  • Programmer merasa sangat sulit untuk bekerja dengan pointer; oleh karena itu adalah tanggung jawab programmer untuk memanipulasi pointer dengan hati-hati.

Ringkasan:

  • Penunjuk tidak lain adalah lokasi memori tempat data disimpan.
  • Penunjuk digunakan untuk mengakses lokasi memori.
  • Ada berbagai jenis pointer seperti null pointer, wild pointer, void pointer dan jenis pointer lainnya.
  • Penunjuk dapat digunakan dengan larik dan string untuk mengakses elemen secara lebih efisien.
  • Kita dapat membuat pointer fungsi untuk memanggil fungsi secara dinamis.
  • Operasi aritmatika dapat dilakukan pada pointer yang disebut aritmatika pointer.
  • Penunjuk juga dapat menunjuk ke fungsi yang memudahkan untuk memanggil fungsi yang berbeda dalam hal mendefinisikan larik penunjuk.
  • Bila Anda ingin menangani tipe data variabel yang berbeda, Anda dapat menggunakan pointer void typecast.

Bahasa C

  1. Variabel C# dan Tipe Data (Primitif)
  2. Jenis Fungsi yang Ditentukan Pengguna dalam Pemrograman C
  3. C Pointer
  4. C++ Pointer dengan Contoh
  5. Apa itu Pencetakan 3D? Prinsip Kerja | Jenis | Aplikasi
  6. Java - Tipe Variabel
  7. C - Pointer
  8. Tipe Variabel C++
  9. Python - Tipe Variabel
  10. Apa itu Pengelasan?- Definisi | Jenis Pengelasan