Con trỏ nâng cao
Function Pointer (Con trỏ hàm)
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int main() {
int (*op)(int, int); // khai bao con tro ham
op = add;
printf("%d", op(5, 3)); // 8
op = sub;
printf("%d", op(5, 3)); // 2
}
Callback
void sort(int arr[], int n, int (*cmp)(int, int)) {
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (cmp(arr[j], arr[j+1]) > 0) {
int t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t;
}
}
Void pointer
void *ptr; // con tro toan cuc, khong co kieu
int x = 10; ptr = &x;
printf("%d", *(int*)ptr); // ep kieu khi dung
Con trỏ cấp 2 (Double pointer)
int x = 10, *p = &x, **pp = &p;
printf("%d", **pp); // 10
Mảng con trỏ hàm
int (*ops[])(int,int) = {add, sub, mul};
printf("%d", ops[0](5,3)); // goi add
Ứng dụng: qsort với callback
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
qsort(arr, n, sizeof(int), cmp);