我想傳遞參數即刻功能,無需像這樣產生額外的變量:傳球達陣參數的功能
void DrawSprite(float a[2], float b[2]) { /* */ }
DrawSprite((0.0f, 0.0f), (50.0f, 50.0f));
是否有可能,如果是,該怎麼辦呢?
我想傳遞參數即刻功能,無需像這樣產生額外的變量:傳球達陣參數的功能
void DrawSprite(float a[2], float b[2]) { /* */ }
DrawSprite((0.0f, 0.0f), (50.0f, 50.0f));
是否有可能,如果是,該怎麼辦呢?
對這個重要問題的一些答案似乎是誤導。問題是:將一個固定大小的數組傳遞給一個函數。首先像
float x[2] = {0.1F, 0.2F};
float y[2];
y=x;
是error: invalid array assignment
(海合會4.6.1,但我們應該對「標準」將在這裏講,沒有特定的編譯器功能)。非常正確 - 操作應該完成什麼? x
和y
都指向堆棧中的一塊內存,因此將float*
x
複製到y
將毫無意義,因爲這些值不會被複制到最初保留的位置,即y[0],y[1]
。
從float x[2]
唯一合理的演員陣容是float *y
。這正是調用函數時發生的情況。您的功能DrawSprite(float a[2], float b[2])
實際上被視爲DrawSprite(float* a, float* b)
(您可能會打印出typeid(a).name()
進行檢查)。因此,您可以通過x
至DrawSprite
,並且此x
將簡單地轉換爲float*
。
第二個問題是初始化。代碼(float[2]){1.0, 2.0}
確實構建了一個固定大小的臨時數組float
(同樣可以通過typeid((float[2]){1.0, 2.0}).name()
進行檢查,至少在gcc
上),但是對於該數組沒有太大的限制,因爲float [2]
的分配被禁止。您可以將它轉換爲float*
(例如,由z=(float[2]){1.0,2.0};
指定,但是指定爲0,因此它實際上是z=(float*)(float[2]){1.0,2.0};
),或者您可以將它傳遞給您的函數,該函數也執行相同操作,即轉換爲float*
。
是的,你可以做到這一點。
試試這個:
void DrawSprite(float a[2], float b[2]) { /* */ }
DrawSprite((float[2]){1.0, 2.0}, (float[2]){3.0, 4.0});
包括在第二行數組大小是好事,因爲它可以讓編譯器執行數組的大小,但你不必。
如果語法是惱人的你輸入,你可以使用一個預處理宏:
#define P(X,Y) (float[]){X, Y}
DrawSprite(P(1.0,2.0), P(3.0,4.0));
或者是內聯函數。
你可以這樣調用:
float x[2] = {0.0F, 0.0F};
float y[2] = {50.0F, 50.0F};
DrawSprite(x, y);
DrawSprite((float[2]){1.0, 2.0}, (float[2]){3.0, 4.0});
這工作與海灣合作委員會,但在MSVC不起作用。我相信這不是標準的C++
你可以做類似如下(與g++ -std=c++11
編譯):
#include <array>
typedef std::array<float, 2> Point2f;
void foo(Point2f v) {
// do something
}
int main() {
foo({1.0, 1.0});
}
的{}
風格的初始化被稱爲初始化列表,它是從C++ 11向前。 std::array
也是如此。
參考:
更好聲明它作爲被使用malloc聲明浮動的陣列。它可以讓你在工作完成後根據自己的意願釋放數組。由於在malloc中內存將被分配在堆中。傳遞數組可能會導致模糊的階段,並導致代碼崩潰
你不會傳遞一個數組到一個函數,你只需要在函數中傳遞一個指向數組的指針。所以說你的問題沒有任何意義。 – 2012-01-12 16:35:42
@Als不,數組不是指針。一個數組是一個數組。這並不是說傳遞基本數組意味着複製數組。 – wilhelmtell 2012-01-12 16:42:58
你可能想考慮爲你的觀點添加一個類(用C++ 0x更容易通過引用/ rvalues傳遞)或者看看初始化列表http://stackoverflow.com/questions/5733828/initializing-from-an- initializer-list-but-without(看到第一篇文章,不是很漂亮,但很接近) – ted 2012-01-12 17:30:19