On 09/04/2014 02:54 AM, nikki wrote:

> a pointer variable to save an adres of a function, then dereferencing to use
> it.

If possible, even in C, I would recommend using a 'function pointer' for that. However, there are cases where the signature of the function should be unknown to the code that is storing it so a void* is used. (Note that, as discussed on these forums in the past, void* has always been intended to be a data pointer. The fact that it works for function pointers is something we get as lucky accidents, which will most probably always supported by compilers and CPUs.)

Here is how D does function pointers:

  http://dlang.org/expression.html#FunctionLiteral

And a chapter that expands on those:

  http://ddili.org/ders/d.en/lambda.html

> Now I am wondering when to use the ** ?

The simple answer is when dealing with the address of a type that is 'void*' itself. In other words, there is nothing special about **: It appears as the type that is "a pointer to a pointer". Inserting spaces:

    int * p;      // A pointer to an int
    void* * q;    // A pointer to a void*

    // (untested)
    static assert (is (typeof(*p) == int));
    static assert (is (typeof(*q) == void*));

    int i;
    *p = i;    // Can store an int

    void* v;
    *q = v;    // Can store a void*

Ali

Reply via email to