我有一段代碼是用C++編寫的,需要用C語言編寫。我轉換了大部分代碼,但我無法弄清楚如何將函數中的C++傳遞引用轉換爲C代碼,即如何將使用C++ pass-by-reference的函數轉換爲C?
實施例:
int& a;
它是在一些用作輸入變量使用:
void do_something(float f, char ch, int& a)
當我與CI GET編譯器錯誤編譯它。什麼是正確的方式來取代C中的引用傳遞?
我有一段代碼是用C++編寫的,需要用C語言編寫。我轉換了大部分代碼,但我無法弄清楚如何將函數中的C++傳遞引用轉換爲C代碼,即如何將使用C++ pass-by-reference的函數轉換爲C?
實施例:
int& a;
它是在一些用作輸入變量使用:
void do_something(float f, char ch, int& a)
當我與CI GET編譯器錯誤編譯它。什麼是正確的方式來取代C中的引用傳遞?
在C做的方式是通過指針傳遞:在do_something
使用,而不是
void do_something(float f, char ch, int& a)
{
a = 5;
printf("%d", a);
}
時
void do_something(float f, char ch, int* a)
而且您現在需要提領a
void do_something(float f, char ch, int* a)
{
*a = 5;
printf("%d", *a);
}
而當撥打電話do_something
時,您需要知道什麼是被傳遞的,所以不是
int foo = 0;
d_something(0.0, 'z', foo);
你需要做的:
int foo = 0;
d_something(0.0, 'z', &foo);
得到(即指針)foo的地址。
因爲引用不是在C語言中,你必須通過一個指針來代替:
void do_something(float f, char ch, int *a)
然後在功能您必須取消對它的引用的身體,以獲得或者修改所指向的值:
*a = 5;
假設x
在int
,你要調用的函數,使用&
接線員給它的地址(將其轉換爲int *
指針):
do_something(f, ch, &x)
的最接近的是一個指針:
do_something(float f, char ch, int* a)
已經做到了這一點,你需要改變a
- >*a
函數中無處不在,並改變調用函數傳遞&a
代替的a
。
「易」,但不可取,方法是從一個輔助指針變量和使用#define
隨意downvote這個答案得到幫助!我想,如果我可以:)
打開本
int foo(int &a) {
a = 42;
/* ... */
return 0;
}
到
int foo(int *tmpa) { /* & to *; rename argument */
#define a (*tmpa) /* define argument to old variable */
a = 42; /* no change */
/* ... */ /* no change */
return 0; /* no change */
#undef a /* "undo" macro */
}
注:引進的#define必須謹慎進行
我不會建議有人使用這樣的'#define',除非他很懶,或者不想記住'a'是一個指針。 –
我實際上會贊成它,因爲它很聰明並解釋了這個概念,並且我們同意這是不明智的。 –
創造性的答案,但它沒有考慮調用約定中的變化(因爲您需要更改調用此方法以使用&的代碼)。我不會失望,但我不會喜歡,因爲這不應該做。 –
有沒有相當於C中的C++引用。 但是,您可以使用指針。然而,它們是具有自己地址的變量,而C++引用只是別名。
function do_something(float f, char ch, int* a)
改爲使用指針。 – 2011-09-22 15:48:01