C-language function pointers

Source: Internet
Author: User

??

A pointer to a function:

#include "StdAfx.h"

?

#include <stdio.h>

#include "T.h"

?

void Function (int i)

{

???? printf ("Call Function:%d\n", i);

}

?

void F1 ()

{

???? typedef void (*pfunc) (int);

???? PFUNC PFUNC;

???? Pfunc = Function;

???? Pfunc (1);????

????

???? Pfunc = &Function;

???? Pfunc (2);

}

?

?

void F2 ()

{

???? typedef void (FUNC) (int);

????

???? func* Pfunc;

???? Pfunc = Function;

???? Pfunc (3);

?

???? Pfunc = &Function;

???? Pfunc (4);????

?

}

?

void T2 ()

{

???? F1 ();

???? F2 ();

}

/*

Call Function:1

Call Function:2

Call Function:3

Call Function:4

Please press any key to continue . . .

*/

Second, function pointer disassembly:

#include <signal.h>

void (*signal (int signo,Void (*func) (int)))) (int);

?

1 , using typedef Disassembly

typedef void (*sighandler_t) (int);

sighandler_t signal (int signum,sighandler_t handler);

?

2 , using function pointers to understand

Int (*p) ();

P point to a parameter without any parameters, and the return value is int the function;

Int (*fun ()) ();

the difference between this formula and the above is Fun () Replace P , i.e. Fun () The return value is a function pointer, the function pointer ( can be seen as p) , point to one without any parameters, and return a value of int function;

void (*signal (int signo,void (*FUNC) (int)))) (int);

can be seen as signal () function, this function takes two parameters: one is an integer and one is a function pointer. The return value of this signal () function is also a function pointer, which points to a function with an integer parameter and a return value of void .

?

This function is too complex to have any meaning in itself and is usually used typedef after the simple signal processing function.

?

3 , Case analysis

1 , instance source code

?

2 , execution procedures

?

3 , view process number

?

4 , send a signal to the process

?

5 , the process receives the signal
?

??

Three,(* (void (*) ()) 0) ()------ What is this?


Do you feel the above example is too simple, not exciting? OK, let's have some excitement, look at the following example:

/colgroup>

1

(* (void (*) ()) 0) ();

This is the C Traps and pitfalls An example of this classic book. Not crazy, huh? Let's analyze and analyze:

1

2

3

4

The first step: void (*) (), you can see that this is a function pointer type. This function has no parameters and no return value.

The second step: (Void (*) ()) 0, which is to cast 0 to the function pointer type, 0 is an address, that is, a function exists within a section of the first address of 0.

Step Three: (* (Void (*) ()) 0), which is the contents of a section of memory starting at 0 address, which is the function stored in a section of the first address of 0.

Fourth Step: (* (Void (*) ()) 0) (), this is a function call.


Seems to be very simple, right, the above example rewrite rewrite:

/colgroup>

1

(* (char** (*) (char?**,char?**)) 0) (? char?**,char?**);


If there is no analysis above, Ken is afraid of not easy to see this expression to understand it. But it should be a very simple thing now. What does the reader think?

?

?

Reference:

1. Anatomy of "void (*signal (int) signo,void ( int))) (int)" http:// www.51hei.com/bbs/dpj-29464-1.html ;

2. the understanding and use of C-language function pointers;

?

C-language function pointers

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.