This question already has answers here:
Caret character between types rather than variables, surrounded by parentheses
(2 answers)
C "block" caret character
(2 answers)
Caret in objective C
(3 answers)
What does this caret ^ syntax, with void on either side mean? [duplicate]
(4 answers)
Closed 2 years ago.
In the macos documentation for qsort, we see the declaration:
void qsort_b(void *base, size_t nel, size_t width, int (^compar)(const void *, const void *));
What is the meaning of the caret?
The ^ in the function declaration indicates that the callback is a block pointer rather than a function pointer.
As stated later in the man page:
The heapsort_b(), mergesort_b(), and qsort_b() routines are like the corresponding routines without the _b suffix, expect that the compar
callback is a block pointer instead of a function pointer.
Related
This question already has answers here:
Argument conversion: (normal) pointer to void pointer, cast needed?
(1 answer)
Concept of void pointer in C programming
(16 answers)
Closed 2 years ago.
The pthread_exit function should take a void pointer as input. I'm wondering how come it's possible to pass the address of an integer variable (e.g. pthread_exit(&ret1) here) without performing a cast conversion.
This question already has answers here:
What is array to pointer decay?
(11 answers)
Why can't we pass arrays to function by value?
(9 answers)
Difference between passing array and array pointer into function in C
(3 answers)
Closed 3 years ago.
In C, if you pass an array as an argument to a function, what actually gets passed? And Why?
See the standard.
On entry to the function, the size expressions of each variably modified parameter are
evaluated and the value of each argument expression is converted to the type of the
corresponding parameter as if by assignment. (Array expressions and function
designators as arguments were converted to pointers before the call.)
This question already has answers here:
How do you read C declarations?
(10 answers)
Closed 4 years ago.
I have this syntax:
double (*(f(double (*)(int))))(int);
Do I understand correctly syntax above that f is function that gets pointer to function that receive int and return a double?
No; it's actually even more complicated than that.
cdecl.org glosses this type definition as:
declare f as function (pointer to function (int) returning double) returning pointer to function (int) returning double
In other words, the function pointed to by f takes a function pointer as an argument, and returns a function pointer. Both of those function pointers must be to functions which take an int as an argument and return a double.
You could simplify this definition a bit using an intermediate typedef as follows:
typedef double (*int_to_double_function)(int);
int_to_double_function (*f)(int_to_double_function);
This question already has answers here:
Correct way of declaring pointer variables in C/C++ [closed]
(5 answers)
Placement of the asterisk in pointer declarations
(14 answers)
Closed 4 years ago.
I am bit confused on where to use asterisk while using struct type.
What's the difference between struct node* x and struct node *x ?
This question already has answers here:
How does dereferencing of a function pointer happen?
(5 answers)
Closed 8 years ago.
What is the difference in dereferencing a function pointer with and without parentheses.
both the mechanism are working same on linux Gnu Gcc.
void (*fp)(void); //function pointer
void func(void);
fp = func;
(*fp)(); //dereferencing with parentheses
fp(); // without parentheses
You need to know that
(*fp)() = fp()
The function pointer can be called in both the ways and both are valid and same.
Check the below link:
How does dereferencing of a function pointer happen?