Lulusan Penuding kepada Fungsi di atas C

Hai di sana, pemrogram beraspirasi! Hari ini, kita akan menyusur sebuah perjalanan yang menarik ke atas dunia pemrograman C, khususnya berfokus kepada penuding kepada fungsi. Jangan khawatir jika kamu baru dengan ini; Saya akan membimbing kamu melalui setiap langkah dengan penyedian seorang guru kenaikan yang telah membantu pelajar tak terhitung untuk menguasai konsep ini. Jadi, mari kita penyelam!

C - Passing Pointers to Functions

Kelebihan Penuding Penuding kepada Fungsi

Sebelum kita kena tangannya dengan kod, mari kita fahami mengapa penuding penuding kepada fungsi adalah satu hal yang besar di atas pemrograman C. Bayangkan jika kamu berbagi satu resepi dengan seorang kawan. Alih-alih memberikan mereka satu salinan keseluruhan buku resepi, kamu hanya memberitahu mereka nombor halaman. Itu adalah hampir seperti apa yang kita lakukan dengan penuding!

Berikut adalah kelebihan utama:

  1. Ketepatan Memori: Penuding penuding adalah seperti memberikan arahAlih-alih daripada peta keseluruhan. Ia menggunakan lebih sedikit memori kerana kita hanya luluskan alamat, bukan data keseluruhan.

  2. Kelajuan: Ia lebih cepat untuk luluskan satu alamat kecil daripada satu rak data besar.

  3. Kemampuan untuk Mengubahsuai Data Asal: Apabila kamu luluskan satu penuding, fungsi boleh mengakses dan mengubahsuai data asal secara langsung.

  4. Bekerja dengan Struktur Data Besar: Untuk struktur data besar seperti rak atau structs, penuding penuding adalah lebih efisien.

Contoh Penuding Penuding kepada Fungsi

Mari kita mula dengan satu contoh yang ringkas untuk melihat bagaimana ini bekerja di atas praktek:

#include <stdio.h>

void ubahNilai(int *ptr) {
*ptr = 100;
}

int utama() {
int num = 10;
printf("Sebelum: %d\n", num);

ubahNilai(&num);
printf("Selepas: %d\n", num);

return 0;
}

Dalam contoh ini, kita luluskan alamat num kepada fungsi ubahNilai. Fungsi kemudian mengubah nilai di atas alamat itu kepada 100. Apabila kita menjalankan program ini, kita akan lihat:

Sebelum: 10
Selepas: 100

Menakjubkan, kan? Kita baru sahaja mengubah satu pembolehubah di atas utama fungsi dari di atas fungsi lain!

Swap Nilai dengan Penuding Penuding

Sekarang, mari kita tangani satu masalah pemrograman klasik: menukar dua nilai. Ini adalah di mana penuding benar-benar bersinar!

#include <stdio.h>

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int utama() {
int x = 5, y = 10;
printf("Sebelum swap: x = %d, y = %d\n", x, y);

swap(&x, &y);
printf("Selepas swap: x = %d, y = %d\n", x, y);

return 0;
}

Di sini, fungsi swap kita mengambil penuding kepada dua integer. Ia kemudian menggunakan penuding ini untuk menukar nilai. Output akan adalah:

Sebelum swap: x = 5, y = 10
Selepas swap: x = 10, y = 5

Ia seperti sihir, tetapi ianya hanya kuasa penuding!

Penuding Rak Penuding kepada Fungsi

Rak dan penuding di atas C adalah rapat berkaitan. Apabila kita luluskan satu rak kepada fungsi, kita sebenarnya luluskan penuding kepada elemen pertama rak. Mari lihat ini di atas tindakan:

#include <stdio.h>

void cetakRak(int *arr, int saiz) {
for (int i = 0; i < saiz; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int utama() {
int nombor[] = {1, 2, 3, 4, 5};
int saiz = sizeof(nombor) / sizeof(nombor[0]);

printf("Elemen rak adalah: ");
cetakRak(nombor, saiz);

return 0;
}

Dalam contoh ini, nombor secara automatik diubah kepada penuding apabila luluskan kepada cetakRak. Output akan adalah:

Elemen rak adalah: 1 2 3 4 5

Penuding Rak Penuding kepada Fungsi

Di atas C, rak-rak adalah hanya rak-rak huruf, jadi penuding rak kerja sama seperti penuding rak. Ini adalah satu contoh:

#include <stdio.h>

void cetakString(char *str) {
while (*str != '\0') {
printf("%c", *str);
str++;
}
printf("\n");
}

int utama() {
char penyambut[] = "Hello, World!";
printf("Penyambut adalah: ");
cetakString(penyambut);

return 0;
}

Ini akan output:

Penyambut adalah: Hello, World!

Penuding Struktur Penuding kepada Fungsi

Akhir sekali, mari kita lihat bagaimana kita boleh luluskan penuding kepada struktur. Ini adalah sangat berguna apabila berurusan dengan struktur data besar:

#include <stdio.h>

struct Persona {
char nama[50];
int umur;
};

void ulangTahun(struct Persona *p) {
p->umur++;
}

int utama() {
struct Persona john = {"John Doe", 25};

printf("Sebelum ulang tahun: %s adalah %d tahun\n", john.nama, john.umur);

ulangTahun(&john);

printf("Selepas ulang tahun: %s adalah %d tahun\n", john.nama, john.umur);

return 0;
}

Dalam contoh ini, kita luluskan penuding kepada satu Persona struktur kepada ulangTahun fungsi. Fungsi kemudian meningkatkan umur persona. Output akan adalah:

Sebelum ulang tahun: John Doe adalah 25 tahun
Selepas ulang tahun: John Doe adalah 26 tahun

Dan itu adalah! Kita telah menutupi dasar-dasar penuding kepada fungsi di atas C. Ingat, latihan membuat perfect, jadi jangan takut untuk eksperimen dengan konsep ini. Happy coding!

Method Description Example
Passing Basic Penuding Luluskan alamat pembolehubah untuk mengubahsuai mereka secara langsung void ubahNilai(int *ptr)
Swapping Values Gunakan penuding untuk menukar nilai antara dua pembolehubah void swap(int *a, int *b)
Passing Rak Penuding Luluskan rak secara efisien kepada fungsi void cetakRak(int *arr, int saiz)
Passing Rak Penuding Bekerja dengan rak-rak di atas fungsi void cetakString(char *str)
Passing Struktur Penuding Mengubahsuai struktur data besar secara efisien void ulangTahun(struct Persona *p)

Credits: Image by storyset