2015-10-07 53 views
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.

+0

給定這些函數定義,你不必使用'&'和'*',只需通過'BufferX'即可。 –

+0

'char * BufferX'這裏是一個指向'char'的指針,通常意味着一個以null結尾的C字符串。 – crashmstr

+0

微控制器也像分號一樣! – wildplasser

回答

2

我有一個使用間接操作者兩種功能*

星號*可以被解釋爲一個引用操作在表達式的上下文中。在聲明的上下文中,它用來表示聲明的類型是一個指針。

[I]需要調用從第一功能的第二功能,並傳遞給第一個函數的參數

由於這兩種類型相同,則不需要使用任何運營商都:簡單地傳遞指針的值不變,這樣的:

xResult=Func2(Event, BufferX); 

注:不用說,你需要的Func2預先聲明,以FO這個呼叫被正確解釋。

+0

你在談論原型嗎?是的,我清楚這一部分。 –

+0

@E_Blue是的,這正是我所說的。前向聲明和原型是一回事。 – dasblinkenlight

1

正確的調用是:

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

既然你BufferX已經是你不必要麼去參考或利用它的地址的正確數據類型。

1

Func2想要char*類型的論據。 BufferX的類型已經是char*

因此你可以通過BufferXFunc2

xResult = Func2(Event, BufferX); 

&BufferX會給你的BufferX地址,char**型的,而*BufferX會給你的東西,BufferX點,即一個char

+0

你是否試圖寫char *而不是char **或者有一個我不知道的char **類型? –

+0

@E_Blue不,我的意思是'char **'。 *類型*中的'*'表示「指向」,所以'char *'=指向'char'的指針,'char **'=指向'char *'的指針。 – emlai

+0

Pointerception。從來沒有讀過它。任何單詞來推薦我執行搜索? –

1

您提供的代碼是而不是使用間接運算符,它使用的是指針類型。具有指針類型的值是唯一可以作爲間接運算符操作數的類型,但這是一個單獨的問題。

具體而言,函數Func1()參數BufferX已鍵入char *,這使得它的指針到一個char(推測它指向一個較長的緩衝器的第一char)。

參數BufferXFunc2()也有類型char *。如果是適當的參數傳遞從Func1()Func2(),那麼你不需要任何裝飾 - 你只是想通過您收到的值:

xResult = Func2(Event, BufferX); 
2

var是一個指針..

*var意味着值指針指..

&var意味着變量var的地址(無論它是一個指針)

所以該類別中的你只需要傳遞變量。

xResult=Func2(Event, BufferX); 

它是因爲Func2在第二個參數中要求一個指針。 (不是一個值,不是一個指針的地址。)