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

Fungsi Pointer dalam Pemrograman C dengan Contoh

Pointer memberikan banyak kemungkinan untuk fungsi 'C' yang kami batasi untuk mengembalikan satu nilai. Dengan parameter pointer, fungsi kita sekarang dapat memproses data aktual daripada salinan data.
Untuk mengubah nilai variabel yang sebenarnya, pernyataan panggilan meneruskan alamat ke parameter pointer dalam suatu fungsi.
Dalam hal ini tutorial, Anda akan belajar-

Contoh Pointer Fungsi

Misalnya, program berikutnya menukar dua nilai dari dua:

void swap (int *a, int *b);
int main() {
  int m = 25;
  int n = 100;
  printf("m is %d, n is %d\n", m, n);
  swap(&m, &n);
  printf("m is %d, n is %d\n", m, n);
  return 0;}
void swap (int *a, int *b) {
  int temp;
  temp = *a;
  *a = *b;
  *b = temp;}
}

Keluaran:

m is 25, n is 100
m is 100, n is 25

Program menukar nilai variabel aktual karena fungsi mengaksesnya berdasarkan alamat menggunakan pointer. Di sini kita akan membahas proses program:

  1. Kami mendeklarasikan fungsi yang bertanggung jawab untuk menukar dua nilai variabel, yang mengambil dua pointer integer sebagai parameter dan mengembalikan nilai apa pun saat dipanggil.
  2. Pada fungsi utama, kita mendeklarasikan dan menginisialisasi dua variabel integer ('m' dan 'n') kemudian kita mencetak nilainya masing-masing.
  3. Kami memanggil fungsi swap() dengan meneruskan alamat dua variabel sebagai argumen menggunakan simbol ampersand. Setelah itu, kami mencetak nilai variabel yang baru ditukar.
  4. Di sini kita mendefinisikan konten fungsi swap() yang mengambil dua alamat variabel integer sebagai parameter dan mendeklarasikan variabel integer sementara yang digunakan sebagai kotak penyimpanan ketiga untuk menyimpan salah satu variabel nilai yang akan dimasukkan ke variabel kedua.
  5. Simpan isi variabel pertama yang ditunjuk oleh 'a' di variabel sementara.
  6. Simpan variabel kedua yang ditunjukkan oleh b di variabel pertama yang ditunjukkan oleh a.
  7. Perbarui variabel kedua (ditunjukkan oleh b) dengan nilai variabel pertama yang disimpan dalam variabel sementara.

Fungsi dengan Parameter Array

Di C, kita tidak bisa melewatkan array dengan nilai ke suatu fungsi. Sedangkan nama array adalah pointer (alamat), jadi kita hanya meneruskan nama array ke suatu fungsi yang artinya meneruskan pointer ke array.

Misalnya, kami mempertimbangkan program berikut:

int add_array (int *a, int num_elements);
int main() {
  int Tab[5] = {100, 220, 37, 16, 98};
  printf("Total summation is %d\n", add_array(Tab, 5)); 
  return 0;}
int add_array (int *p, int size) {
  int total = 0;
  int k;
  for (k = 0; k < size; k++) {
    total += p[k];  /* it is equivalent to total +=*p ;p++; */}
 return (total);}

Keluaran:

 Total summation is 471

Disini kami akan menjelaskan kode program beserta detailnya

  1. Kami mendeklarasikan dan mendefinisikan fungsi add_array() yang mengambil alamat array( pointer) dengan nomor elemennya sebagai parameter dan mengembalikan total akumulasi penjumlahan elemen-elemen ini. Pointer digunakan untuk mengulang elemen array (menggunakan notasi p[k]), dan kita mengakumulasi penjumlahan dalam variabel lokal yang akan dikembalikan setelah iterasi seluruh elemen array.
  2. Kami mendeklarasikan dan menginisialisasi array integer dengan lima elemen integer. Kami mencetak penjumlahan total dengan meneruskan nama larik (yang bertindak sebagai alamat) dan ukuran larik ke add_array() disebut fungsi sebagai argumen.

Fungsi yang Mengembalikan Array

Dalam C, kita dapat mengembalikan pointer ke array, seperti pada program berikut:

#include <stdio.h>
int * build_array();
int main() {
  int *a;
  a = build_array(); /* get first 5 even numbers */
  for (k = 0; k < 5; k++)
    printf("%d\n", a[k]);
  return 0;}
int * build_array() {
  static int Tab[5]={1,2,3,4,5};
   return (Tab);}

Keluaran:

1
2
3
4
5

Dan disini kita akan membahas detail programnya

  1. Kami mendefinisikan dan mendeklarasikan fungsi yang mengembalikan alamat array yang berisi nilai integer dan tidak mengambil argumen apa pun.
  2. Kami mendeklarasikan pointer integer yang menerima array lengkap yang dibangun setelah fungsi dipanggil dan kami mencetak isinya dengan mengulangi seluruh lima elemen array.

Perhatikan bahwa pointer, bukan array, didefinisikan untuk menyimpan alamat array yang dikembalikan oleh fungsi. Perhatikan juga bahwa ketika variabel lokal dikembalikan dari suatu fungsi, kita harus mendeklarasikannya sebagai statis dalam fungsi tersebut.

Petunjuk Fungsi

Seperti yang kita ketahui dengan definisi bahwa pointer menunjuk ke alamat di lokasi memori mana pun, mereka juga dapat menunjuk ke awal kode yang dapat dieksekusi sebagai fungsi dalam memori.
Sebuah pointer ke fungsi dideklarasikan dengan * ,pernyataan umum dari deklarasinya adalah:

return_type (*function_name)(arguments)

Anda harus ingat bahwa tanda kurung di sekitar (*function_name) penting karena tanpa tanda kurung, kompilator akan berpikir bahwa function_name mengembalikan pointer dari return_type.
Setelah mendefinisikan pointer fungsi, kita harus menetapkannya ke sebuah fungsi. Misalnya, program berikutnya mendeklarasikan fungsi biasa, mendefinisikan pointer fungsi, memberikan pointer fungsi ke fungsi biasa dan setelah itu memanggil fungsi melalui pointer:

#include <stdio.h>
void Hi_function (int times); /* function */
int main() {
  void (*function_ptr)(int);  /* function pointer Declaration */
  function_ptr = Hi_function;  /* pointer assignment */
  function_ptr (3);  /* function call */
 return 0;}
void Hi_function (int times) {
  int k;
  for (k = 0; k < times; k++) printf("Hi\n");}

Keluaran:

Hi
Hi
Hi

  1. Kami mendefinisikan dan mendeklarasikan fungsi standar yang mencetak teks Hi sebanyak k kali yang ditunjukkan oleh parameter kali saat fungsi dipanggil
  2. Kami mendefinisikan fungsi pointer (dengan deklarasi khusus) yang mengambil parameter integer dan tidak mengembalikan apa pun.
  3. Kita menginisialisasi fungsi pointer kita dengan Hi_function yang artinya pointer menunjuk ke Hi_function().
  4. Daripada pemanggilan fungsi standar dengan menempelkan nama fungsi dengan argumen, kami hanya memanggil fungsi pointer dengan meneruskan angka 3 sebagai argumen, dan hanya itu!

Ingatlah bahwa nama fungsi menunjuk ke alamat awal kode yang dapat dieksekusi seperti nama array yang menunjuk ke elemen pertamanya. Oleh karena itu, instruksi seperti function_ptr =&Hi_function dan (*funptr)(3) adalah benar.
CATATAN:Operator alamat &dan operator tipuan * tidak perlu dimasukkan selama penetapan fungsi dan pemanggilan fungsi.

Array of Function Pointer

Array pointer fungsi dapat memainkan peran switch atau pernyataan if untuk membuat keputusan, seperti pada program berikut:

#include <stdio.h>
int sum(int num1, int num2);
int sub(int num1, int num2);
int mult(int num1, int num2);
int div(int num1, int num2);

int main() 
{  int x, y, choice, result;
  int (*ope[4])(int, int);
  ope[0] = sum;
  ope[1] = sub;
  ope[2] = mult;
  ope[3] = div;
  printf("Enter two integer numbers: ");
  scanf("%d%d", &x, &y);
  printf("Enter 0 to sum, 1 to subtract, 2 to multiply, or 3 to divide: ");
  scanf("%d", &choice);
  result = ope[choice](x, y);
  printf("%d", result);
return 0;}

int sum(int x, int y) {return(x + y);}
int sub(int x, int y) {return(x - y);}
int mult(int x, int y) {return(x * y);}
int div(int x, int y) {if (y != 0) return (x / y); else  return 0;}
Enter two integer numbers: 13 48
Enter 0 to sum, 1 to subtract, 2 to multiply, or 3 to divide: 2
624

Di sini, kami membahas detail program:

  1. Kami mendeklarasikan dan mendefinisikan empat fungsi yang mengambil dua argumen integer dan mengembalikan nilai integer. Fungsi-fungsi ini menambah, mengurangi, mengalikan, dan membagi dua argumen mengenai fungsi mana yang dipanggil oleh pengguna.
  2. Kami mendeklarasikan 4 bilangan bulat untuk menangani operan, tipe operasi, dan hasil masing-masing. Juga, kami mendeklarasikan array empat pointer fungsi. Setiap pointer fungsi elemen array mengambil dua parameter integer dan mengembalikan nilai integer.
  3. Kami menetapkan dan menginisialisasi setiap elemen array dengan fungsi yang sudah dideklarasikan. Misalnya, elemen ketiga yang merupakan pointer fungsi ketiga akan menunjuk ke fungsi operasi perkalian.
  4. Kami mencari operan dan jenis operasi dari pengguna yang diketik dengan keyboard.
  5. Kami memanggil elemen array yang sesuai (Penunjuk fungsi) dengan argumen, dan kami menyimpan hasil yang dihasilkan oleh fungsi yang sesuai.

Instruksi int (*ope[4])(int, int); mendefinisikan array pointer fungsi. Setiap elemen array harus memiliki parameter dan tipe kembalian yang sama.
Pernyataan result =ope[choice](x, y); menjalankan fungsi yang sesuai sesuai dengan pilihan yang dibuat oleh pengguna Dua bilangan bulat yang dimasukkan adalah argumen yang diteruskan ke fungsi.

Fungsi Menggunakan Pointer void

Void pointer digunakan selama deklarasi fungsi. Kami menggunakan izin tipe pengembalian void * untuk mengembalikan tipe apa pun. Jika kita berasumsi bahwa parameter kita tidak berubah saat meneruskan ke suatu fungsi, kita mendeklarasikannya sebagai const.
Misalnya:

 void * cube (const void *);

Perhatikan program berikut:

#include <stdio.h>
void* cube (const void* num);
int main() {
  int x, cube_int;
  x = 4;
  cube_int = cube (&x);
  printf("%d cubed is %d\n", x, cube_int);
  return 0;}

void* cube (const void *num) {
  int result;
  result = (*(int *)num) * (*(int *)num) * (*(int *)num);
  return result;}

Hasil:

 4 cubed is 64

Di sini, kita akan membahas detail program:

  1. Kami mendefinisikan dan mendeklarasikan fungsi yang mengembalikan nilai integer dan mengambil alamat variabel yang tidak dapat diubah tanpa tipe data tertentu. Kami menghitung nilai kubus dari variabel konten (x) yang ditunjukkan oleh pointer num, dan karena ini adalah pointer kosong, kami harus mengetikkan cast ke tipe data integer menggunakan penunjuk notasi (* tipe data) tertentu, dan kami kembali nilai kubus.
  2. Kami mendeklarasikan operand dan variabel hasil. Juga, kami menginisialisasi operan kami dengan nilai “4.”
  3. Kami memanggil fungsi kubus dengan meneruskan alamat operan, dan kami menangani nilai yang dikembalikan dalam variabel hasil

Petunjuk Fungsi sebagai Argumen

Cara lain untuk mengeksploitasi pointer fungsi dengan meneruskannya sebagai argumen ke fungsi lain yang kadang-kadang disebut “fungsi panggilan balik” karena fungsi penerima “memanggilnya kembali.”
Dalam file header stdlib.h, Quicksort “qsort() ” function menggunakan teknik ini yang merupakan algoritma yang didedikasikan untuk mengurutkan array.

void qsort(void *base, size_t num, size_t width, int (*compare)(const void *, const void *))

Program berikut mengurutkan array bilangan bulat dari bilangan kecil ke besar menggunakan fungsi qsort():

#include <stdio.h>
#include <stdlib.h>
int compare (const void *, const void *); 
int main() {
  int arr[5] = {52, 14, 50, 48, 13};
  int num, width, i;
  num = sizeof(arr)/sizeof(arr[0]);
  width = sizeof(arr[0]);
  qsort((void *)arr, num, width, compare);
  for (i = 0; i < 5; i++)
    printf("%d ", arr[ i ]);
  return 0;}
int compare (const void *elem1, const void *elem2) {
  if ((*(int *)elem1) == (*(int *)elem2))  return 0;
  else if ((*(int *)elem1) < (*(int *)elem2)) return -1;
  else return 1;}

Hasil:

 13 14 48 50 52

Di sini, kita akan membahas detail program:

  1. Kami mendefinisikan fungsi perbandingan yang terdiri dari dua argumen dan mengembalikan 0 ketika argumen memiliki nilai yang sama, <0 ketika arg1 datang sebelum arg2, dan>0 ketika arg1 datang setelah arg2. Parameternya adalah tipe pointer kosong yang dicor ke yang sesuai tipe data array (bilangan bulat)
  2. Kami mendefinisikan dan menginisialisasi array integer Ukuran array disimpan di num variabel dan ukuran setiap elemen array disimpan dalam variabel lebar menggunakan operator C sizeof() yang telah ditentukan sebelumnya.
  3. Kami menyebutnya qsort fungsi dan meneruskan nama array, ukuran, lebar, dan fungsi perbandingan yang ditentukan sebelumnya oleh pengguna untuk mengurutkan array kita dalam urutan menaik. Perbandingan akan dilakukan dengan mengambil dua elemen array di setiap iterasi hingga seluruh array akan diurutkan.
  4. Kami mencetak elemen array untuk memastikan bahwa array kami diurutkan dengan baik dengan mengulangi seluruh array menggunakan for loop.

Bahasa C

  1. Jenis Fungsi yang Ditentukan Pengguna dalam Pemrograman C
  2. C++ do… while loop dengan Contoh
  3. C++ Pointer dengan Contoh
  4. Operator C++ Overloading dengan Contoh
  5. Fungsi C++ dengan Contoh Program
  6. Tutorial Koleksi C# dengan Contoh
  7. Pointer dalam C:Apa itu Pointer dalam Pemrograman C? Jenis
  8. Python String count() dengan CONTOH
  9. Fungsi Python Lambda dengan CONTOH
  10. Python round() fungsi dengan CONTOH