Question: I have two functions that uses indirect operator `*` and need to call the second function from the first function and pass the parameters given to the first function and dubious about if I must to use `*` or `&` to pass the buffer address.

```
char Func1(short Enable, char Event, char *BufferX)
{
    char xResult;

    xResult=Func2(Event, ?BufferX);//* or &
    return xResult;
}

char Func2(char Event, char *BufferX)
{

}

```

The code is C for microcontrollers, not standard C.

Answer: 
> 
> I have two functions that uses indirect operator `*`
> 
> 
> 

The asterisk `*` can be interpreted as a *dereference operator* in the context of an expression. In the context of a declaration it serves to indicate that the type being declared is a pointer.

> 
> [I] need to call the second function from the first function and pass the parameters given to the first function
> 
> 
> 

Since both types are identical, you do not need to use any operator at all: simply pass the value of the pointer unchanged, like this:

```
xResult=Func2(Event, BufferX);

```

**Note:** It goes without saying that you need a forward declaration of `Func2` in order for this call to be interpreted correctly.
`Func2` wants an argument of type `char*`. The type of `BufferX` is already `char*`.

Thus you can just pass `BufferX` straight to `Func2`:

```
xResult = Func2(Event, BufferX);

```

`&BufferX` would give you the address of `BufferX`, of type `char**`, while `*BufferX` would give you the thing that `BufferX` points to, i.e. a `char`.