0

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

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。

4

5 回答 5

2

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

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

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

由于这两种类型是相同的,因此您根本不需要使用任何运算符:只需不变地传递指针的值,如下所示:

xResult=Func2(Event, BufferX);

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

于 2015-10-07T17:48:47.447 回答
2

让我们var成为一个指针..

*var表示指针所指的值..

&var表示变量 var 的地址(不管是指针)

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

xResult=Func2(Event, BufferX);

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

于 2015-10-07T17:51:10.367 回答
1

正确的调用是:

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

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

于 2015-10-07T17:48:49.627 回答
1

Func2想要一个类型的参数char*。的类型BufferX已经是char*.

因此,您可以直接传递BufferXFunc2

xResult = Func2(Event, BufferX);

&BufferX会给你BufferX类型的地址char**,同时*BufferX会给你BufferX指向的东西,即a char

于 2015-10-07T17:49:20.243 回答
1

您提供的代码没有使用间接运算符,而是使用指针类型。具有指针类型的值是唯一可以作为间接运算符的操作数的类型,但这是另一回事。

具体来说,BufferXfunction 的参数Func1()具有 type char *,这使其成为指向 a 的指针char(大概它指向较长缓冲区的第一个)。 char

参数BufferXtoFunc2()也有 type char *。如果从 to 传递参数是合适的Func1()Func2()那么你不需要任何装饰——你只想传递你收到的值:

xResult = Func2(Event, BufferX);
于 2015-10-07T17:50:05.177 回答