Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C function pointers

I am learning C from "C by K&R". I was going through Function pointers section.There was an example to sort an array of strings using function pointers and void pointers.(to be specific,on page 100). I have a fair understanding of function pointers and void pointers.

The example given there calls

qsort((void**) lineptr, 0, nlines-1,(int (*)(void*,void*))(numeric ? numcmp : strcmp));

And it seemlessly uses void ptr,like as below to compare and swap.

I understand that it takes array of pointer and each element by itself is a void pointer to the string. How is it possible to compare,swap a void ptr with another.

void sort(void *v[],int i,int j)
{
    id *temp;
    temp = v[i]; 
    v[i] = v[j];
    v[j] = temp;  
}

Can anyone explain the concept behind this.

like image 439
user13252 Avatar asked Nov 25 '25 13:11

user13252


1 Answers

How is it possible to compare, swap a void ptr with another?

  • Compare: comparing a void ptr with each other is meaningless, as their values are addresses.

  • Swap: A pointer is a variable holding an address. By changing a pointer's value you change the address it points to. Data itself is not even considered here.


Note: void pointers does not interpret the data they are pointing to. That is why you need explicit type conversion when you dereference them, such that there is a correspondence between the data they are pointing to and the variable this data is assign to.

like image 138
Ziezi Avatar answered Nov 27 '25 02:11

Ziezi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!