使用间接运算符

时间:2015-10-07 17:43:09

标签: c function indirection

我有两个使用间接运算符*的函数,需要从第一个函数调用第二个函数并将给定的参数传递给第一个函数,并且如果我必须使用*或者是否可疑&传递缓冲区地址。

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

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

char Func2(char Event, char *BufferX)
{

}

代码是C代表微控制器,而不是标准C。

5 个答案:

答案 0 :(得分:2)

  

我有两个使用间接运算符*

的函数

星号*可以在表达式的上下文中解释为取消引用运算符。在声明的上下文中,它用于指示声明的类型是指针。

  

[我]需要从第一个函数调用第二个函数并将给定的参数传递给第一个函数

由于两种类型都相同,因此根本不需要使用任何运算符:只需将指针的值保持不变,如下所示:

xResult=Func2(Event, BufferX);

注意:不言而喻,您需要Func2的前向声明才能正确解释此调用。

答案 1 :(得分:2)

var成为指针..

*var表示指针引用的值..

&var表示变量var的地址(无论它是指针)

所以在这种情况下你只需要传递变量。

xResult=Func2(Event, BufferX);

因为Func2在第二个参数中要求指针。 (不是值,不是指针的地址..)

答案 2 :(得分:1)

正确的电话是:

xResult=Func2(Event, /*nothing here*/BufferX);

由于您的BufferX已经是正确的数据类型,因此您无需取消引用或获取其地址。

答案 3 :(得分:1)

Func2想要一个char*类型的参数。 BufferX的类型已为char*

因此,您可以直接将BufferX传递给Func2

xResult = Func2(Event, BufferX);

&BufferX会为您提供BufferX类型char**的地址,而*BufferX会为您提供BufferX指向的地址,即char

答案 4 :(得分:1)

您提供的代码使用间接运算符,它使用指针类型。具有指针类型的值是唯一可以作为间接运算符的操作数的类型,但这是一个单独的事项。

具体来说,函数BufferX的参数Func1()具有类型char *,这使它成为char的指针(可能它指向第一个 char更长的缓冲区。)

BufferXFunc2()的参数也有char *类型。如果将Func1()中的参数传递给Func2()是合适的,那么您不需要任何装饰 - 您只想传递您收到的值:

xResult = Func2(Event, BufferX);