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: 
let `var` be a pointer..

`*var` means value the pointer refers..

`&var` means the address of the variable var(No matter it is a pointer)

so in this case you need to pass only the variable.

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

```

Its because Func2 is asking for a pointer in its second argument. (Not a value, not a address to a pointer.. )
The code you presented is *not* using the indirection operator, it is using pointer types. Values having pointer type are the only kind that can be operands of the indirection operator, but that's a separate matter.

Specifically, argument `BufferX` of function `Func1()` has type `char *`, which makes it a pointer to a `char` (presumably it points to the *first* `char` of a longer buffer).

Argument `BufferX` to `Func2()` also has type `char *`. If it is appropriate to pass on the arguments from `Func1()` to `Func2()`, then you do not need any adornment -- you just want to pass the values you received:

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

```