Announcement

Collapse
No announcement yet.

hay dùng con trỏ hàm khi nào

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] hay dùng con trỏ hàm khi nào

    chào các bác !

    em mới học c được 1 thời gian , giờ đang đang học về Con Trỏ và Hàm trong lập trình C.

    cho em hỏi khi nào ta thường hay dùng :

    -hàm : int a(int x, int y);
    -con trỏ hàm : int *a(int x, int y);
    -mảng con trỏ hàm : int *a[10](int x, int y);

    các bác , giải thích vấn đề trên cùng 1 bài tập. để xem hạn chế của từng cái !

    thank các bác !

  • #2
    Các khái niệm bạn hỏi mình thấy có thể dễ dàng tìm được trên mạng?
    Nhưng tiện đây thì cũng đưa ra một ví dụ nhỏ:

    Code:
    int add1(const int a)
    {
        return a + 1;
    }
    
    int add2(const int a)
    {
        return a + 2;
    }
    
    void printAdd(const int a, int(*addx)(const int))
    {
    	printf("%d\n", addx(a));
    }
    
    int main()
    {
        int (*addArray[2])(const int) = {add1, add2};
        printAdd(0, &add1); // & : optional
        printAdd(0, add2);
        printf("%d\n", addArray[0](2));
        printf("%d\n", (*addArray[1])(2)); // * : optional
        return 0;
    }
    => "Dễ dàng" nhận ra mục đích sử dụng của các khái niệm trên:
    - Hàm: cái này được dùng thường xuyên, là khái niệm cơ bản.
    - Con trỏ hàm: chủ yếu sử dụng trong trường hợp muốn cài đặt đa hình, như trong ví dụ trên, muốn in ra kết quả của hai hàm add1(int) và add2(int), nếu cài đặt không sử dụng con trỏ hàm bạn phải cài đặt với hai hàm khác nhau: printAdd1(int) và printAdd2(int). Với con trỏ hàm, bạn chỉ cài đặt với một hàm duy nhất printAdd nhận thêm một đối số con trỏ tới hàm bạn muốn gọi - cái này làm mình liên tưởng tới strategy pattern .
    - Mảng con trỏ hàm: chỉ là một mảng lưu trữ các con trỏ hàm thôi, việc sử dụng cũng như mảng bình thường.

    Tùy tình huống mà bạn lựa chọn cách để xử lý.
    08520021
    Đỗ Trọng Ân
    Last edited by 08520021; 11-09-2013, 00:24.

    Comment


    • #3
      Mình thấy vd dễ thấy nhất của con trỏ hàm là CALLBACK function ( 1 hàm chỉ được gọi thông qua con trỏ hàm chứ không qua tên của nó, nó thường được truyền vào 1 hàm và được hàm đó hoặc hàm liên quan tới hàm đó gọi )
      Một vd nữa là khi hàm bạn cần gọi một hàm nào đó, mà bạn muốn hàm này được quyết định bởi người dùng, thì sẽ có đối số là 1 con trỏ hàm.

      trong C++ để truyền "hàm" vào trong hàm thì người ta còn dùng một cái nữa gọi là function object

      Comment

      LHQC

      Collapse
      Working...
      X