11-16-2010
The syntax to use a function pointer is a little tricky, but the concept isn't hard at all if you know what a pointer is. It's just a pointer, that points to a function, because functions reside in memory too.
When you call a function name in C, what you're actually doing is calling an address in memory where the function's code resides. Most of the linker's job is to figure out where everything should go and substitute appropriate addresses for names. So, whenever you call a function, it actually ends up as a hardcoded address...
It's also possible to call an arbitrary address; for instance, if you loaded a dynamic library, you have to use function pointers to call functions from it since you won't know what they will be until the library's loaded. It works the same as far as the code's concerned. It just uses a pointer value you give it, instead of hardcoding one.
This User Gave Thanks to Corona688 For This Post:
9 More Discussions You Might Find Interesting
1. Programming
I am pondering the next question:
Can I safely sare objects that have virtual functions (i.e. have
virtual function table pointers) between two processes ?
Where will the pointers point to in each process ?
What I am afraid of is that in the creating process the pointer
will indeed point to... (2 Replies)
Discussion started by: Seeker
2 Replies
2. Shell Programming and Scripting
/ (6 Replies)
Discussion started by: jy2728
6 Replies
3. UNIX for Dummies Questions & Answers
hi guys!
just want to ask if you could help me with the sript i'm working on. i need to automatically generate a summarized report everyday for all transactions the day before and ftp it to another machine. my only problem is that i need to name the file as the date yesterday. for example if i... (12 Replies)
Discussion started by: crpalermo
12 Replies
4. Programming
HI,
Here is some thing that is puzzling me from a long time.
Can some body explain me this with example.
The question is :-
What is the difference between function pointer and pointer to a function.
Where do we actually use the function pointers and pointer to functions.
Thanks in... (0 Replies)
Discussion started by: S.Vishwanath
0 Replies
5. Programming
Hello all !
Could someone throw some light on whether there's a limit to the number of characters contained in the command string that is passed to the system() call in C.
Is it OS dependent? If yes, what are the limits for each?
Thanks. (4 Replies)
Discussion started by: vsanjit
4 Replies
6. Programming
Just a statement I need some clarification
Im aware that malloc() can be used to create pointers, and free() is used to deallocate dynamic memory, however is free() the ONLY way to dispose of the dynamic memory, because not using free() means the dynamic memory still exists and it may cause some... (1 Reply)
Discussion started by: JamesGoh
1 Replies
7. Shell Programming and Scripting
Hello everyone,
here's my problem: I want to create two shell scripts. one of them should includes some functions, the other one just the function calls. Is this possible? Can i call a function which is placed in a scriptfile eg functions.sh out of another script eg call.sh? :confused: And if... (2 Replies)
Discussion started by: Sebi0815
2 Replies
8. Programming
I have a code as following:
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
//the class Nth is a predicates
class Nth{
private:
int nth;
int count;
public:
Nth(int n):nth(n),count(0){}
bool operator()(int){
... (2 Replies)
Discussion started by: homeboy
2 Replies
9. Programming
I am attempting to create an array of function pointers. The examples I follow to do this are from:
support.microsoft.com/en-us/help/30580/how-to-declare-an-array-of-pointers-to-functions-in-visual-c
... (3 Replies)
Discussion started by: spflanze
3 Replies
LEARN ABOUT SUNOS
id32_free
id32_alloc(9F) Kernel Functions for Drivers id32_alloc(9F)
NAME
id32_alloc, id32_free, id32_lookup - 32-bit driver ID management routines
SYNOPSIS
#include <sys/ddi.h>
#include <sys/id32.h>
uint32_t id32_alloc(void *ptr, int flag);
void id32_free(uint32_t token);
void *id32_lookup(uint32_t token);
INTERFACE LEVEL
Solaris architecture specific (Solaris DDI).
PARAMETERS
ptr any valid 32- or 64-bit pointer
flag determines whether caller can sleep for memory (see kmem_alloc(9F) for a description)
DESCRIPTION
These routines were originally developed so that device drivers could manage 64-bit pointers on devices that save space only for 32-bit
pointers.
Many device drivers need to pass a 32-bit value to the hardware when attempting I/O. Later, when that I/O completes, the only way the
driver has to identify the request that generated that I/O is via a "token". When the I/O is initiated, the driver passes this token to the
hardware. When the I/O completes the hardware passes back this 32-bit token.
Before Solaris supported 64-bit pointers, device drivers just passed a raw 32-bit pointer to the hardware. When pointers grew to be 64 bits
this was no longer possible. The id32_*() routines were created to help drivers translate between 64-bit pointers and a 32-bit token.
Given a 32- or 64-bit pointer, the routine id32_alloc() allocates a 32-bit token, returning 0 if KM_NOSLEEP was specified and memory could
not be allocated. The allocated token is passed back to id32_lookup() to obtain the original 32- or 64-bit pointer.
The routine id32_free() is used to free an allocated token. Once id32_free() is called, the supplied token is no longer valid.
Note that these routines have some degree of error checking. This is done so that an invalid token passed to id32_lookup() will not be
accepted as valid. When id32_lookup() detects an invalid token it returns NULL. Calling routines should check for this return value so that
they do not try to dereference a NULL pointer.
CONTEXT
These functions can be called from user or interrupt context. The routine id32_alloc() should not be called from interrupt context when the
KM_SLEEP flag is passed in. All other routines can be called from interrupt or kernel context.
SEE ALSO
kmem_alloc(9F)
Writing Device Drivers
SunOS 5.10 12 Dec 2001 id32_alloc(9F)