Bagaimana saya harus menggunakan array pointer fungsi di C?
Bagaimana saya bisa menginisialisasi mereka?
c
initialization
function-pointers
The Guy with The Hat
sumber
sumber
(*p[4]) (int, int) {sum,substract,mul,div}
Jawaban di atas dapat membantu Anda tetapi Anda mungkin juga ingin tahu cara menggunakan array fungsi pointer.
Anda hanya bisa menetapkan alamat fungsi dengan tipe pengembalian yang sama dan tipe argumen yang sama dan tanpa argumen ke array penunjuk fungsi tunggal.
Anda juga bisa memberikan argumen seperti di bawah ini jika semua fungsi di atas memiliki jumlah argumen yang sama.
Catatan: di sini dalam array penomoran pointer fungsi akan mulai dari 0 sama seperti pada array umum. Jadi dalam contoh di atas
fun1
dapat dipanggil jika opsi = 0,fun2
dapat dipanggil jika opsi = 1 danfun3
dapat dipanggil jika opsi = 2.sumber
(*func_ptr[3])
menjadi(*func_ptr[3])()
dan itu akan dikompilasiInilah cara Anda dapat menggunakannya:
New_Fun.h
New_Fun.c
Main.c
Saya harap ini membantu dalam memahami
Function Pointer.
sumber
f1, f2 ...
dan ganti 'writefile, readfromfile ...' ... itu menjadi lebih dapat redable"Jawaban" ini lebih merupakan tambahan dari jawaban VonC; hanya mencatat bahwa sintaks dapat disederhanakan melalui typedef, dan inisialisasi agregat dapat digunakan:
sumber
Oh, ada banyak contoh. Lihat saja apa saja di dalam glib atau gtk. Anda dapat melihat pekerjaan pointer fungsi bekerja di sana sepanjang jalan.
Di sini misal inisialisasi barang gtk_button.
Dan di gtkobject.h Anda menemukan deklarasi berikut:
Hal-hal (* set_arg) adalah sebuah pointer untuk berfungsi dan ini dapat misalnya ditugaskan implementasi lain di beberapa kelas turunan.
Seringkali Anda melihat sesuatu seperti ini
Jadi Anda dapat menjangkau ke dalam tabel dengan nama dan memanggil fungsi "terkait".
Atau mungkin Anda menggunakan tabel hash di mana Anda meletakkan fungsi dan menyebutnya "dengan nama".
Salam
Friedrich
sumber
Dapat menggunakannya dengan cara seperti ini:
sumber
Ini harus berupa contoh kode copy & paste singkat & sederhana dari tanggapan di atas. Semoga ini bisa membantu.
sumber
Solusi paling sederhana adalah dengan memberikan alamat vektor akhir yang Anda inginkan, dan memodifikasinya di dalam fungsi.
sumber
Pertanyaan ini sudah dijawab dengan contoh yang sangat bagus. Satu-satunya contoh yang mungkin hilang adalah di mana fungsi mengembalikan pointer. Saya menulis contoh lain dengan ini, dan menambahkan banyak komentar, kalau-kalau ada yang merasa terbantu:
sumber
Contoh sederhana ini untuk array multidimensi dengan pointer fungsi ":
sumber