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

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

Pointer fungsi membuka kemampuan canggih dalam C, memungkinkan fungsi untuk memanipulasi data secara langsung melalui alamat memori daripada menyalin nilai. Dengan meneruskan alamat ke parameter pointer, sebuah fungsi dapat memodifikasi variabel asli, memungkinkan pola seperti penukaran in-place, callback dinamis, dan fungsi higher-order.

Contoh Pointer Fungsi

Rutinitas swap klasik menunjukkan bagaimana fungsi dapat menukarkan nilai dua variabel dengan bekerja pada alamatnya.

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; }

Output:

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

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Deklarasikan swap dengan dua pointer integer.
  2. Inisialisasikan m dan n dalam main dan cetak mereka.
  3. Panggil swap(&m, &n) untuk meneruskan alamat.
  4. Di dalam swap, gunakan variabel sementara untuk menukarkan nilai.
  5. Dereference pointer untuk membaca/menulis data aktual.

Fungsi dengan Parameter Array

Array menjadi pointer saat diteruskan ke fungsi. Program berikut menjumlahkan elemen array dengan mengiterasi pointer.

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; for (int k = 0; k < size; k++) { total += p[k]; /* equivalent to total += *p; p++; */ } return total; }

Output:

 Total summation is 471

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Definisikan add_array untuk menerima pointer dan ukuran, mengembalikan jumlah.
  2. Teruskan nama array Tab (yang menjadi pointer) dan panjangnya ke fungsi.

Fungsi yang Mengembalikan Array

Sebuah fungsi dapat mengembalikan pointer ke array statis. Pendekatan ini berguna ketika pemanggil memerlukan array sementara tanpa mengelola alokasi memori.

#include <stdio.h> int * build_array(); int main() { int *a; a = build_array(); /* get first 5 even numbers */ for (int 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; }

Output:

1 2 3 4 5

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Deklarasikan fungsi yang mengembalikan pointer ke array statis.
  2. Gunakan pointer yang dikembalikan untuk mengiterasi dan mencetak isi array.

Pointer Fungsi

Pointer fungsi menyimpan alamat titik entri fungsi, memungkinkan dispatch dinamis dan callback. Sintaks deklarasi memerlukan kurung di sekitar bintang untuk menghindari salah penafsiran.

return_type (*function_name)(arguments)

Contoh: Panggil rutinitas melalui pointer.

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

Output:

Hi Hi Hi

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Definisikan fungsi reguler.
  2. Deklarasikan pointer fungsi dengan tanda tangan yang benar.
  3. Tetapkan pointer ke nama fungsi.
  4. Panggil fungsi melalui pointer.

Array Pointer Fungsi

Menyimpan beberapa pointer fungsi dalam array memungkinkan pendekatan tabel-driven, mirip dengan pernyataan switch. Program berikut menunjukkan kalkulator sederhana.

#include <stdio.h> int sum(int num1, int num2); int sub(int num1, int num2); int mult(int num1, int num2); int divi(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] = divi; 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 divi(int x, int y) {return y != 0 ? x / y : 0;}

Result: Enter 13 48 2 → 624

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Definisikan empat fungsi aritmetika.
  2. Buat array empat pointer fungsi dengan tanda tangan yang cocok.
  3. Tetapkan setiap pointer ke fungsi yang sesuai.
  4. Ambil pilihan pengguna dan panggil fungsi yang dipilih.

Fungsi Menggunakan Pointer Void

Pointer void menyediakan akses data yang tidak bergantung pada tipe. Saat digunakan dalam parameter fungsi, mereka memungkinkan rutin untuk menerima tipe data apa pun, asalkan pemanggil menyediakan cast yang benar.

void * cube (const void *);

Contoh program:

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

Result: 4 cubed is 64

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Definisikan fungsi yang menerima pointer void konstan dan mengembalikan pointer void.
  2. Cast pointer ke int * untuk mengakses nilai.
  3. Hitung kubus dan cast hasil kembali ke void * untuk dikembalikan.

Pointer Fungsi sebagai Argumen

Meneruskan pointer fungsi ke fungsi lain adalah pola umum untuk callback. Pustaka standar qsort menggunakan teknik ini untuk mengurutkan array tipe apa pun.

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

Contoh yang mengurutkan array integer:

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

Result: 13 14 48 50 52

Pointer Fungsi dalam C: Contoh Praktis dan Praktik Terbaik

  1. Implementasikan compare untuk mengembalikan negatif, nol, atau positif berdasarkan dua integer.
  2. Tentukan ukuran array dan lebar elemen dengan sizeof.
  3. Panggil qsort dengan array, jumlah, lebar, dan fungsi perbandingan.
  4. Cetak array yang diurutkan untuk memverifikasi operasi.

Bahasa C

  1. Empat Pola Terbukti untuk Fungsi yang Dibuat Pengguna dalam C
  2. Perulangan do-while C++: Sintaks, Contoh Praktis, dan Perulangan Bersarang
  3. Menguasai Pointer C++: Konsep, Contoh, dan Aplikasi Praktis
  4. Pengoverloadan Operator C++ – Panduan Praktis dengan Contoh Kode
  5. Fungsi C++ Dijelaskan dengan Contoh Kode Praktis
  6. Menguasai Koleksi C#: Tutorial Praktis dengan Contoh Dunia Nyata
  7. Pointer dalam C: Panduan Lengkap tentang Tipe, Penggunaan, dan Praktik Terbaik
  8. Menguasai str.count() Python: Cara Menghitung Karakter & Substring dengan Contoh
  9. Menguasai Fungsi Lambda Python: Contoh Praktis & Praktik Terbaik
  10. Fungsi round() Python Dijelaskan dengan Contoh Praktis