Results 1 to 10 of 10

Thread: ว่าด้วย function pointer

  1. #1
    Junior Member
    Join Date
    Nov 2006
    Posts
    27


    function pointer คืออะไร

    function pointer คือ pointer ชี้ไป ยัง function

    ถ้าผมโพสแค่นี้ ผมคงถูกแบนข้อหา spam เป็นแน่แท้

    [hide=2]แต่มันก็เป็นอย่างนั้น อันที่จริง การที่เราสร้างตัวแปร ตัวแปรจะถูกเก็บไว้ใน memory
    แล้วไง? ฟังก์ชันก็เช่นกัน ทำไมเราจาสร้าง pointer ชี้ไปไม่ได้
    ตัวอย่างการใช้ ฟังก์ชันพ้อยเตอร์มีให้เห็นกันอยู่ทั่วไป เช่น
    เป็นวิธีที่ง่ายที่สุดในการเรียกใช้ dll (ดูกระทู้เรื่อง การใช้ zlib library)
    แต่ เพราะคุณจำเป็นต้องรู้จักและใช้งานมันได้แน่หรือ

    ตามความคิดผม ซึ่งมิได้เก่ง c/c++มากนัก แนะนำว่าใช้เท่าที่จำเป็น
    ดูตัวอย่างเบื้องต้นหน่อย
    [code]
    #include <stdio.h>
    typedef void (*funptr)(int);
    void test(int a);
    int main(){

  2. #2
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    ทำไมต้องเติม static เอางี้ ถ้าเอา static ออก มันจะ error เพราะ[/b]
    เพราะว่า ตัวอย่างที่ให้มาเป็น Function Pointer เวลาเขียน class แล้วมี function ใน class เวลาเรียกใช้งาน function จริงๆ จะมี parameter อีกตัว คือ this ส่งไปให้ด้วยโดยที่เราไม่เห็น ตัว compiler จะจัดการให้ แต่ถ้าเขียนเป็นแบบ static function ใน class มันไม่ต้องการ this จึงใช้ function pointer ได้

    แต่ถ้าหากว่าต้องการ ใช้ function pointer สำหรับ class จะต้องเขียนอีกแบบหนึ่งเรียกว่า pointer to member function

    โดยส่วนตัวแล้วไม่แนะนำให้เขียน function pointer เพราะว่ามันยากต่อการอ่านและการแก้ไข จริงอยู่ว่ามันทำให้ code เราสั้นก็จริง แต่เมื่อ project ใหญ่ขึ้นรู้สึกว่ามัน maintain ลำบาก ถ้าไม่จำเป็นจริงๆจะไม่ใช้

  3. #3
    Junior Member
    Join Date
    Nov 2006
    Posts
    27


    เป็นพระคุณอย่างสูง

    ผมยังไม่ได้เขียน pointer to member function เลย
    เดี๋ยวผมจะเขียนเพิ่ม รอให้ได้คอมใหม่ก่อน แปป

  4. #4
    Junior Member
    Join Date
    Mar 2007
    Posts
    15


    คือว่า ถ้าเราอยากจะส่ง Array 2 dimentions แบบพอยเตอร์ ไปให้ฟังชั่นอะครับ เรามีวิธีส่งได้ยังไงบ้าง หากไม่ต้อง fix ค่า size ของ Array ที่จะส่งมาอะ เพราะถ้าต้อง fix size ด้วย มันทำให้ส่งข้อมูลได้ไม่เสถียรพออะครับ

  5. #5
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    คือว่า ถ้าเราอยากจะส่ง Array 2 dimentions แบบพอยเตอร์ ไปให้ฟังชั่นอะครับ เรามีวิธีส่งได้ยังไงบ้าง หากไม่ต้อง fix ค่า size ของ Array ที่จะส่งมาอะ เพราะถ้าต้อง fix size ด้วย มันทำให้ส่งข้อมูลได้ไม่เสถียรพออะครับ
    [/b]
    ถ้าเป็น Array 1D จะทำแบบนี้
    [code]
    void Foo(int* pData, int len);
    //....
    int data[10];
    Foo(&data[0], 10);
    //....
    void Foo(int* pData, int len)
    {

  6. #6
    Junior Member
    Join Date
    Aug 2007
    Posts
    10


    คือว่า ถ้าเราอยากจะส่ง Array 2 dimentions แบบพอยเตอร์ ไปให้ฟังชั่นอะครับ เรามีวิธีส่งได้ยังไงบ้าง หากไม่ต้อง fix ค่า size ของ Array ที่จะส่งมาอะ เพราะถ้าต้อง fix size ด้วย มันทำให้ส่งข้อมูลได้ไม่เสถียรพออะครับ
    [/b]
    ช่วยอธิบายหน่อยได้ไหมครับว่าไม่เสถียรยังไง เพราะผมก็ใช้บ่อยเหมือนกัน
    โดยเวลาสร้าง array จะใช้การ malloc/realloc เอาน่ะครับ

    [code]
    void Foo(int** pData, int cx, int cy);
    //...
    int sizeX = 5;
    int sizeY = 2;
    int** pData = (int**)malloc(sizeof(int*)*sizeX);
    for(int i = 0; i< sizeX; i++)
    b = bit
    B = byte
    m = Milli
    K = Kilo
    M = Mega

    Mb = Mega Bit(s)
    MB = Mega Byte(s)

    8 bits = 1 Byte
    1024 Bytes = 1 KB
    1024 KB = 1 MB
    1024 MB = 1 GB
    1024 GB = 1 TB

  7. #7
    Member
    Join Date
    Aug 2007
    Location
    EEP BenchamaMaharat-Ubon
    Posts
    49


    จริง ๆ ผมใช้วิธีเดียวกับท่าน Flametongue น่ะครับ พอดีไปเปิดเจอเว็บนึงเขียนเกี่ยวกับ pointer -> array 2 dimentions ได้ดี

    ทีเดียวครับ ลองเอาไปดูนะครับ http://c-faq.com/aryptr/dynmuldimary.html อันนี้เอาไปเลยไม่ต้อง hide ให้ยาก

    แล้วก็เห็นเป็นภาษาอังกฤษก็อย่าไปตกใจนะครับ มันมีรูปประกอบ ถ้าเกิดมีพื้นฐานหน่อยอ่านยังไงก็รู้เรื่องครับผม ^^ ถ้าไม่เข้าใจบอกก็ได้

    นะครับ เพื่อจะลองแปลให้แบบตามความเข้าใจตามแบบฉบับของผมเอง

    ส่วนที่ล็อคไว้นี่เป็น code โปรแกรมผมเองครับ โปรแกรมคูณแมทริกซ์(ฟังชั่นหา det adj etc. ยังทำมะเสร็จ อยู่ระหว่างการพัฒนา) เพื่อมี

    คนอยากลองดูครับ เพราะผมใช้การจองหน่วยความจำแบบ pointer แล้วแปลงเป็น array 2 dimentions ครับ แล้วก็ผมพยายามอธิบาย

    เป็นภาษาไทย(แบบมั่วๆ ตามฉบับผมเองครับ ตามความเข้าใจของผมและการเดามั่ว เพราะอ่านมาจากเว็บข้างบนนี้แหละ แล้วก็ลองๆทำตาม)

    ถ้าไม่ดู code ก็ไม่เป็นไรครับ เอามาให้ดูเพื่อเป็นตัวอย่างเฉย ๆ จริงๆอ่านเว็บข้างบนนี้อย่างเดียวก็ ok ละครับ


    **Hidden Content: To see this hidden content your post count must be 5 or greater.**
    คนที่ไม่เคยพ่ายแพ้คือคนที่ไม่เคยทำอะไรเลย

  8. #8
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    [quote]
    ช่วยอธิบายหน่อยได้ไหมครับว่าไม่เสถียรยังไง เพราะผมก็ใช้บ่อยเหมือนกัน
    โดยเวลาสร้าง array จะใช้การ malloc/realloc เอาน่ะครับ

    [code]
    void Foo(int** pData, int cx, int cy);
    //...
    int sizeX = 5;
    int sizeY = 2;
    int** pData = (int**)malloc(sizeof(int*)*sizeX);
    for(int i = 0; i< sizeX; i++)

  9. #9
    Junior Member
    Join Date
    May 2007
    Location
    Thailand
    Posts
    1


    ทำไม Compiler ของผมมันใช้ new int[size] ม่ะได้อ่ะครับ?


    ตอนนี้ผมใช้อยู่ 3 ตัวครับมี
    Borland C/C++ Compiler 5.5
    Turbo C
    Gcc (จำชื่อเต็มๆ ม่ะได้)

    ถ้าทำเป็น C++ มัน Compile ได้อ่ะครับ แต่ว่าถ้าเป็น C จะมี Error และก็ คอมไพล์ไม่ผ่านอ่า


    เป็นเพราะอะไรเหรอครับ?
    [SIZE=2]ใครช่างใจร้ายใจดำ ทำกับฉันได้ !!![/SIZE]

  10. #10
    Senior Member
    Join Date
    Jul 2004
    Location
    Bangkok
    Posts
    187


    ทำไม Compiler ของผมมันใช้ new int[size] ม่ะได้อ่ะครับ?
    ตอนนี้ผมใช้อยู่ 3 ตัวครับมี
    Borland C/C++ Compiler 5.5
    Turbo C
    Gcc (จำชื่อเต็มๆ ม่ะได้)

    ถ้าทำเป็น C++ มัน Compile ได้อ่ะครับ แต่ว่าถ้าเป็น C จะมี Error และก็ คอมไพล์ไม่ผ่านอ่า
    เป็นเพราะอะไรเหรอครับ?
    [/b]
    new เป็น reserved word ใน C++ ไม่มีใน C

Similar Threads

  1. Pointer to member function (or Pointer to member)
    By pspn.n in forum C/C++,C#,VC++,MFC,Win32
    Replies: 3
    Last Post: 11-04-2009, 10:42 PM
  2. ว่าด้วย Anti Virus กับ Virus "gy"
    By rtderak in forum Anti Virus & Firewall
    Replies: 1
    Last Post: 01-09-2008, 10:54 AM
  3. Network Function in C
    By conanjung in forum C/C++,C#,VC++,MFC,Win32
    Replies: 1
    Last Post: 17-11-2007, 03:30 PM
  4. Pointer to Pointer
    By Anonymous in forum C/C++,C#,VC++,MFC,Win32
    Replies: 1
    Last Post: 20-01-2005, 03:59 PM

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •