- 1 1. Mga Batayan ng Argumento sa Function sa Wika ng C
- 2 2. Pagkakaiba sa pagitan ng Aktwal at Pormal na Argumento
- 3 3. Mga Paraan ng Pagpasa ng Argumento
- 4 4. Kombinasyon ng mga Argumento at Return Value
- 5 5. Recursion at mga Argumento
- 6 6. Mga Macro na Katulad ng Function at mga Argumento
- 7 7. Mga Function at mga Argumento sa C Standard Library
- 8 8. Buod
- 9 9. Mga Advanced Techniques na Kaugnay ng mga Argumento
- 10 10. Function Arguments and Memory Management
1. Mga Batayan ng Argumento sa Function sa Wika ng C
Ano ang mga Argumento?
Ang mga argumento ay ang datos na ipinapasa mula sa labas ng isang function kapag ito ay tinawag. Sa pamamagitan ng paggamit ng mga argumento, maaaring tumanggap ang mga function ng iba’t ibang halaga ng input at iproseso ang mga ito nang naaayon. Ang pagmaster sa paggamit ng mga argumento sa C ay mahalaga para sa pagsulat ng muling magagamit at flexible na mga programa.
Aktwal na Argumento at Pormal na Argumento
Ang mga halagang ibinibigay ng tumatawag na code ay tinatawag na aktwal na argumento (kilala rin bilang mga argumento), habang ang mga variable na tumatanggap ng mga halagang ito sa depinisyon ng function ay tinatawag na pormal na argumento (kilala rin bilang mga parameter). Halimbawa, sa PrintScore(score);, ang score ay ang aktwal na argumento, at sa void PrintScore(int score), ang score ay ang pormal na argumento. Ang pag-unawa sa pagkakaiba ay mahalaga para sa tamang paggamit ng mga function.
2. Pagkakaiba sa pagitan ng Aktwal at Pormal na Argumento
Aktwal na Argumento
Ang mga aktwal na argumento ay ang tiyak na mga halagang ipinapasa sa isang function sa panahon ng tawag. Halimbawa, sa PrintScore(100);, ang 100 ay ang aktwal na argumento. Ang mga halagang ito ay ipinapadala sa function at ginagamit sa loob nito.
Pormal na Argumento
Ang mga pormal na argumento ay pansamantalang pangalan ng variable na ginagamit sa depinisyon ng function upang tumanggap ng datos. Ang mga pormal na argumento ay tumutukoy sa mga halaga ng aktwal na argumento sa loob ng function, ngunit hindi mo maaaring baguhin ang halaga sa labas ng function. Halimbawa, sa void PrintScore(int score), ang score ay ang pormal na argumento.
3. Mga Paraan ng Pagpasa ng Argumento
Pass by Value
Pass by value ay nangangahulugang kinokopya ang halaga ng aktwal na argumento papunta sa pormal na argumento. Sa kasong ito, ang mga pagbabago sa pormal na argumento sa loob ng function ay hindi nakaaapekto sa orihinal na aktwal na argumento. Tingnan natin ang isang halimbawa:
void LevelUp(int lv) {
lv++;
}
int main() {
int level = 1;
LevelUp(level);
printf("Level: %dn", level); // Output: Level: 1
}
Sa halimbawang ito, ang lv ay pinapataas sa loob ng LevelUp, ngunit ang halaga ng level sa main ay hindi nagbabago. Ang benepisyo ng pass by value ay pinoprotektahan nito ang orihinal na datos, ngunit maaaring tumaas ang paggamit ng memorya kapag nagpapasa ng malalaking datos.
Pass by Pointer
Pass by pointer ay nangangahulugang ipinapasa ang address ng aktwal na argumento sa function. Pinapayagan nito ang function na direktang baguhin ang halaga ng aktwal na argumento.
void LevelUp(int *plv) {
(*plv)++;
}
int main() {
int level = 1;
LevelUp(&level);
printf("Level: %dn", level); // Output: Level: 2
}
Dito, ang halaga ng level ay direktang binabago sa loob ng LevelUp. Ang kalamangan ay maaari kang mag-modify o magbalik ng maraming halaga, ngunit ang maling paghawak ng pointer ay maaaring magdulot ng bug o memory leak, kaya gamitin nang maingat.
4. Kombinasyon ng mga Argumento at Return Value
Mga Function na may Argumento, Walang Return Value
Ang mga function na ito ay tumatanggap ng argumento ngunit hindi nagbabalik ng halaga. Halimbawa, ang void PrintScore(int score) ay tumatanggap ng iskor bilang argumento at simpleng ipinapakita ito.
Mga Function na Walang Argumento, may Return Value
Ang mga function na ito ay hindi tumatanggap ng argumento ngunit nagbabalik ng halaga. Halimbawa, ang int GetCurrentScore() ay kinakalkula at ibinabalik ang kasalukuyang iskor.
Mga Function na may Argumento at Return Value
Ang mga function na ito ay tumatanggap ng argumento at nagbabalik ng resulta. Halimbawa, ang int Add(int a, int b) ay tumatanggap ng dalawang numero at ibinabalik ang kanilang kabuuan. Ang ganitong mga function ay flexible at malawakang ginagamit.
5. Recursion at mga Argumento
Ano ang Recursion?
Ang recursion ay isang teknik kung saan ang isang function ay tumatawag sa sarili nito. Epektibo ito para hatiin ang mga problema sa mas maliliit na sub-problema, ngunit ang maling kontrol ay maaaring magdulot ng stack overflow.
Halimbawa ng Recursion
Ang sumusunod na halimbawa ay gumagamit ng argumento upang paulit-ulit na hatiin ang isang numero sa 2 gamit ang recursion:
int funcA(int num) {
if(num % 2 != 0) {
return num;
}
return funcA(num / 2);
}
int main() {
int result = funcA(20);
printf("Result: %dn", result); // Output: Result: 5
}
Dito, ang funcA ay tinatawag ang sarili nito nang rekursibo, gamit ang argumento upang paulit-ulit ang proseso. Ang rekursyon ay nagpapasimple sa code para sa mga paulit-ulit na gawain, ngunit laging magtakda ng tamang kondisyon ng pagtapos upang maiwasan ang walang hanggang loop.
6. Mga Macro na Katulad ng Function at mga Argumento
Ano ang Mga Macro na Katulad ng Function?
Ang mga macro na katulad ng function ay mga macro na tumatanggap ng mga argumento at pinapalitan ng code sa panahon ng kompilasyon. Ito ay maaaring mapabuti ang runtime performance.
Halimbawa ng Macro na Katulad ng Function
Ang sumusunod na macro ay nagkakalkula ng bilang ng mga elemento sa isang array:
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
int main() {
int arr[10];
printf("Array size: %dn", ARRAY_SIZE(arr)); // Output: Array size: 10
}
Ang mga macro na katulad ng function ay pinapalitan bago tumakbo ang programa, kaya walang runtime overhead. Dahil hindi sila type-checked, maaari silang gamitin sa anumang data type, ngunit gumamit nang may pag-iingat upang maiwasan ang hindi inaasahang pag-uugali.
7. Mga Function at mga Argumento sa C Standard Library
Paggamit ng Mga Standard Library Function
Ang C ay nagbibigay ng maraming standard library function, karamihan sa mga ito ay gumagamit ng mga argumento para sa iba’t ibang gawain. Halimbawa, ang printf function ay tumatanggap ng variable-length arguments at nagpapakita ng data ayon sa tinukoy na format.
Halimbawa ng Standard Library Function
Narito ang isang halimbawa gamit ang printf function:
printf("Name: %s, Age: %dn", "Alice", 30); // Output: Name: Alice, Age: 30
Ang halimbawang ito ay nagpapakita kung paano gumagamit ang printf ng mga argumento upang magpakita ng parehong mga string at numero. Ang paggamit ng mga standard library function ay nagpapabuti sa code readability at efficiency.
8. Buod
Paggamit ng Variadic Arguments
Ang wika ng C ay nagpapahintulot ng variadic arguments, na nagbibigay-daan sa mga function na tumanggap ng flexible na bilang ng mga argumento. Ito ay tinutukoy gamit ang ellipsis (...) sa function definition. Ang mga variadic arguments ay nagbibigay-daan sa paglikha ng mga function na maaaring hawakan ang hindi tinukoy na bilang ng mga parameter. Ang printf ay isang tipikal na halimbawa, na tumatanggap ng iba’t ibang argumento depende sa format string.
Halimbawa ng Variadic Arguments
Ang sumusunod na function ay tumatanggap ng maraming integer sa pamamagitan ng variadic arguments at nagbabalik ng kanilang kabuuan:
#include <stdarg.h>
#include <stdio.h>
int sum(int count, ...) {
va_list args;
va_start(args, count);
int total = 0;
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
va_end(args);
return total;
}
int main() {
printf("Sum: %dn", sum(4, 1, 2, 3, 4)); // Output: Sum: 10
}
Sa halimbawang ito, ang sum function ay tumatanggap ng maraming integer at nagbabalik ng kanilang kabuuan. Gumagamit ka ng mga macro tulad ng va_list, va_start, va_arg, at va_end upang magtrabaho sa variadic arguments.
Mga Punto na Dapat Isaalang-alang
Kapag gumagamit ng variadic arguments, magbayad ng malapit na pansin sa bilang at uri ng mga argumentong ipinapasa. Kung hindi magkasundo ang caller at function definition sa bilang o uri ng argumento, maaaring magresulta ito ng hindi inaasahang pag-uugali o program crashes.

Mga Practical Use Cases at mga Argumento
Epektibong Paggamit ng mga Argumento
Ang epektibong paggamit ng mga argumento ay nagpapataas ng code readability at reusability. Halimbawa, kapag maraming function ang nagpoproseso ng parehong data, mas mabuti na ipasa ang data bilang mga argumento kaysa gumamit ng global variables. Ito ay nagpapahusay sa independence ng function at nagpapababa ng side effects sa iba pang code.
Memory Efficiency at Performance
Kapag nagpapasa ng malaking data, ang paggamit ng pointers bilang mga argumento ay nakakatulong sa pagtitipid ng memorya. Kung ipapasa mo ang malaking array o structure by value, ang buong data ay kinokopya; gamit ang pointers, ang address lamang ang ipinapasa, na nagpapababa ng memory usage.
Mga Best Practices sa Coding
Kapag nagdidisenyo ng mga function, maingat na isaalang-alang ang bilang at uri ng mga argumentong kailangan. Ang pagpapasa ng hindi kinakailangang mga argumento ay nagpapalala sa paggamit ng function at maaaring magdulot ng bugs. Sa kabilang banda, ang eksplicitong pagpapasa ng lahat ng kinakailangang data bilang mga argumento ay nagpapabuti sa code clarity at maintainability.
9. Mga Advanced Techniques na Kaugnay ng mga Argumento
Callback Functions
Ang callback function ay isang function na ipinapasa bilang argumento sa ibang function at tinatawag sa loob nito. Pinahihintulutan nito ang flexible na disenyo ng programa, lalo na sa event‑driven o asynchronous na programming.
#include <stdio.h>
void executeCallback(void (*callback)(int)) {
callback(10);
}
void printValue(int val) {
printf("Value: %dn", val);
}
int main() {
executeCallback(printValue); // Output: Value: 10
}
Sa halimbawang ito, ang printValue ay ipinapasa bilang callback at isinasagawa sa loob ng executeCallback.
Function Pointers
Pinapayagan ng function pointers na ituring ang mga function na parang mga variable. Maaari kang magpasa ng mga function bilang argumento o tumawag ng iba’t ibang function nang dinamiko sa runtime, na napaka‑kapaki‑pakinabang para sa flexible na disenyo ng code.
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*operation)(int, int) = add;
printf("Result: %dn", operation(2, 3)); // Output: Result: 5
}
Dito, ang function na add ay inatasan sa function pointer na operation at tinawag na parang isang variable.
10. Function Arguments and Memory Management
Dynamic Memory and Arguments
Sa C, maaari kang mag‑allocate ng memorya nang dinamiko gamit ang malloc at free. Kapag nagpapasa ng pointer sa memoryang na‑allocate nang dinamiko bilang argumento, kailangan mong maingat na pamahalaan ang memorya upang maiwasan ang mga leak.
#include <stdlib.h>
#include <stdio.h>
void allocateMemory(int **ptr, int size) {
*ptr = (int *)malloc(size * sizeof(int));
}
int main() {
int *arr;
allocateMemory(&arr, 5);
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // Output: 1 2 3 4 5
}
free(arr); // Free the memory
}
Dito, ang allocateMemory ay nag‑allocate ng memorya nang dinamiko, at ang pointer ay ipinapasa bilang argumento. Ang maling pamamahala ng memorya ay maaaring magdulot ng memory leaks, kaya mag‑ingat.




