what is the advantage of function pointer
Answers were Sorted based on User's Feedback
Answer / yogesh
It is useful when you want to send function as argument to
another function.
| Is This Answer Correct ? | 139 Yes | 13 No |
Answer / mahend
Function pointers are very important while implementing
Callback in C, for instance if Software has layered
archiecture, Function pointer are used bye upper layer to
register with below layer on certain conditions (i.e. some
event or interrupt)
| Is This Answer Correct ? | 72 Yes | 7 No |
Answer / vels
Function pointers are used to call functions at runt time
instead of compile time .
| Is This Answer Correct ? | 55 Yes | 7 No |
Answer / prakash
Function pointers are very useful to send the function as a
parameter to the another function.so,execution time will be
saved.code complexity will be redused
| Is This Answer Correct ? | 42 Yes | 7 No |
Answer / satty
Functional pointer are more readable and executed run time
| Is This Answer Correct ? | 43 Yes | 13 No |
function of pointer is more useful for use of large
function argument.it creats less complecty in function
argument.
| Is This Answer Correct ? | 29 Yes | 10 No |
Answer / vastram naik
Answer:
Pointers to functions are interesting when you pass them to
other functions. A function that takes function
pointers says, in effect, “Part of what I do can be
customized. Give me a pointer to a function, and I’ll call
it when that part of the job needs to be done. That function
can do its part for me.” This is known as a
“callback.” It’s used a lot in graphical user interface
libraries, in which the style of a display is built into the
library but the contents of the display are part of the
application.
As a simpler example, say you have an array of character
pointers (char*s), and you want to sort it by the value
of the strings the character pointers point to. The standard
qsort() function uses function pointers to
perform that task. (For more on sorting, see Chapter III,
“Sorting and Searching Data.”) qsort() takes four
arguments,
u a pointer to the beginning of the array,
u the number of elements in the array,
u the size of each array element, and
u a comparison function,
and returns an int.
The comparison function takes two arguments, each a pointer
to an element. The function returns 0 if the
pointed-to elements compare equal, some negative value if
the first element is less than the second, and some
positive value if the first element is greater than the
second. A comparison function for integers might look
like this:
int icmp( const int *p1, const int *p2 )
{
return *p1 - *p2;
}
C Programming: 146 Just the FAQs
The sorting algorithm is part of qsort(). So is the exchange
algorithm; it just copies bytes, possibly by calling
memcpy() or memmove(). qsort() doesn’t know what it’s
sorting, so it can’t know how to compare them. That
part is provided by the function pointer.
You can’t use strcmp() as the comparison function for this
example, for two reasons. The first reason is that
strcmp()’s type is wrong; more on that a little later. The
second reason is that it won’t work. strcmp() takes
two pointers to char and treats them as the first characters
of two strings. The example deals with an array
of character pointers (char*s), so the comparison function
must take two pointers to character pointers
(char*s). In this case, the following code might be an
example of a good comparison function:
int strpcmp( const void *p1, const void *p2 )
{
char * const *sp1 = (char * const *) p1;
char * const *sp2 = (char * const *) p2;
return strcmp( *sp1, *sp2 );
}
The call to qsort() might look something like this:
qsort( array, numElements, sizeof( char * ), pf2 );
qsort() will call strpcmp() every time it needs to compare
two character pointers (char*s).
Why can’t strcmp() be passed to qsort(), and why were the
arguments of strpcmp() what they were?
A function pointer’s type depends on the return type of the
pointed-to function, as well as the number and
types of all its arguments. qsort() expects a function that
takes two constant void pointers:
void qsort( void *base,
size_t numElements,
size_t sizeOfElement,
int (*compFunct)( const void *, const void *) );
Because qsort() doesn’t really know what it’s sorting, it
uses a void pointer in its argument (base) and in
the arguments to the comparison function. qsort()’s void*
argument is easy; any pointer can be converted
to a void* without even needing a cast. The function pointer
is harder.
For an array of character arrays, strcmp() would have the
right algorithm but the wrong argument types. The
simplest, safest way to handle this situation is to pass a
function that takes the right argument types for
qsort() and then casts them to the right argument types.
That’s what strpcmp() does.
If you have a function that takes a char*, and you know that
a char* and a void* are the same in every
environment your program might ever work in, you might cast
the function pointer, rather than the pointedto
function’s arguments, in this way:
char table[ NUM_ELEMENTS ][ ELEMENT_SIZE ];
/* ... */
/* passing strcmp() to qsort for array of array of char */
qsort( table, NUM_ELEMENTS, ELEMENT_SIZE,
( int (*)( const void *, const void * ) ) strcmp );
Casting the arguments and casting the function pointer both
can be error prone. In practice, casting the
function pointer is more dangerous.
The basic problem here is using void* when you have a
pointer to an unknown type. C++ programs sometime
solve this problem with templates.
| Is This Answer Correct ? | 21 Yes | 9 No |
Answer / nupur
It is used to return more than one value to at a time to
the main program thus overcome the limitation of returnalso
it is used to change the value of the actual argument in
the called function which is otherwise not possible.
| Is This Answer Correct ? | 13 Yes | 5 No |
Answer / vidhya
It is more efficient. So it mostly used in real type
application.
The use of pointer is to store address location of a
variable or a function.as similar we are storing a variable
address in a pointer variable and refering it ,we can store
the address of a function in pointer variable.
| Is This Answer Correct ? | 12 Yes | 6 No |
the constant value in the case label is followed by a a) semicolon b) colon c) braces d) none of the above
Explain modulus operator.
Is fortran still used today?
wat s the meaning of (int *)p +4;
what is c?
I need help with the following lab. Can anyone explain it to me on how to approach this problem. Coding would be great too !!! No busy waiting allowed. Remember that Java monitors are 'signal and continue'. The input data is called the database (DB). In this problem, it consists of a single variable initialized in the main thread, to contain the current time of day in HH:MM:SS:mmm format (mmm is milliseconds) truncated to 3 digits. Threads follow these rules: 1. Readers may all attempt to read at the same time, but NOT if a writer is writing (i.e.; the writer is in the monitor. 2. Writing is exclusive (only 1 writer at a time, no readers while writing). 3. Options: (to be specified by instructor) a. Readers have absolute priority over writers. b. Writers have absolute priority over readers c. When a reader arrives and a writer is waiting, the reader is suspended behind the writer instead of being admitted immediately. Thus, a writer waits for readers that were running when it arrived, but does not to wait for new readers. You may program this in C++ or Java. There are 4 controlling input values: 1. r – number of readers 2. w – number of writers 3. R – delay for a reader to restart 4. W – delay for a writer to restart Create the following program consisting of 1 main process (your main program) with n threads: 1. The main thread: a. Creates the 'n' threads needed. Of these, r of them are readers and w of them are writers. Starts all readers and writers. b. Waits for all 'n' threads to complete. You may use any method to detect when they are all complete. c. Prints out the resulting outputs from the threads. 2. Threads: a. When a thread starts to run, it immediately tries to enter the monitor. b. A reader thread reads the DB, outputs the exact message below, then exits: >>> DB value read =: HH:MM:SS:mmm by reader number: rr where the underlined text is replaced with actual data. c. A writer thread updates the DB with a new value (from the system time), outputs the exact message below, then exits: *** DB value set to: HH:MM:SS:mmm by writer number: ww where the underlined text is replaced with actual data. d. Each thread accesses the data a total of 10 times, exiting, then re-entering the monitor after each access. Hints: 1. File access *might* not be thread-safe, so you should be prepared to handle this. Read the documentation for the language you are using. 2. Suggested values for delays are: a. If looping, R >=1,000,000 and W>=100,000 b. If using “sleep”, then R=100 ms, W=50 ms. Additional: • Thread output is to ONE file used by ALL threads (so you need to synchronize access to it). • Readers must provide sufficient delay that results are useful (delay by R before re-trying). R is another input value. • Writers must also delay. Delay by W, updating the DB each time. W is an input. • Test your program with AT LEAST TWO different sets of values for r and w (#s of readers and writers) plus this set: r = 4, w=2. Basic operation of a thread: attempt to enter the monitor. If unsuccessful, you get put on a queue. When you get in, read or write the data (depending on type of thread), exit the monitor, wait the required delay amount, then try again. Repeat 10 times.
how to find the kth smallest element in the given list of array elemnts.
Explain high-order and low-order bytes.
How can type-insensitive macros be created?
What is time complexity c?
Explain what math functions are available for integers? For floating point?
What happens if you free a pointer twice?