0

con trỏ hàm

Lý thuyết

Khái niệm

Những con trỏ thông thường thì sẽ lưu địa chỉ của biến. Còn con trỏ hàm thì sẽ lưu địa chỉ của một hàm.

Video: https://www.youtube.com/watch?v=ynYtgGUNelE

Cú pháp

kiểu trả về (*name)(tham số truyền)

Ví dụ:

  • void (*func)(void):
    • return: None
    • param: None
  • void (*func)(int*, int):
    • return: None
    • param: int*, int
  • Còn rất nhiều ... Tùy thuộc vào nhu cầu.

Ứng dụng

Ví dụ 1

#include <stdio.h>

typedef void (*func_ptr)(void);

void print_obj1(void)
{
  printf("Object 1\n");
}

void print_obj2(void)
{
  printf("Object 2\n");
}

int main()
{
  // Khai báo con trỏ hàm
  func_ptr p; 
  p = print_obj1;
  p();
  printf("dia chi ham print_obj1: %p\n", p);
  printf("dia chi ham print_obj2: %p\n", print_obj2);
  
  return 0;
}

Ouput

Object 1
dia chi ham print_obj1: 0x563524d35169
dia chi ham print_obj2: 0x563524d35183
dia chi ham print_obj3: 0x563524d3519d

Khi ta có địa chỉ của 1 hàm nào đó, thì ta có thể gọi trực tiếp nó để thực thi yêu cầu.

Ví dụ 2

#include <stdio.h>


typedef void (*func_ptr)(int);


void print_obj1(int id)
{
  printf("Object %d\n", id);
}


int main()
{
  int id_obj1 = 1;
  // Khai báo con trỏ hàm
  func_ptr p; 
  p = print_obj1;
  p(id_obj1);
  
  return 0;
}

Output

Object 1
dia chi ham print_obj1: 0x561a7d6c7149

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.