2013-11-25 67 views
4

我因爲一些必要的程序,我需要轉換的這個飄起了結構從結構轉換爲浮動*

typedef struct 
{ 
    float m[4][4]; 
} myMatrix; 

*

我做它像

if(! g_Fvar16) 
    g_Fvar16 = (float*)malloc(sizeof(float) * 16); 
memcpy(&g_Fvar16, &struct_var, sizeof(float)*16); 
return g_Fvar16; 

這是一個簡單的功能。現在,從我稱之爲這個函數的地方,程序崩潰訪問這些值。 g_Fvar16float*

sizeof(struct_var)是64,所以分配的內存量也是如此。

難道我不能簡單地將複製的內存視爲float *嗎?我thougt這將是最快的..

+1

不要施加'malloc()'的返回值。 ---首先你需要了解指針是什麼以及如何將其轉換爲數組。除此之外,你可以**絕對複製陣列。 – 2013-11-25 18:03:21

+3

C或C++?選一個... –

回答

4

g_fVer16已經是一個指針,所以你必須寫

memcpy(g_Fvar16, &struct_var, sizeof(float)*16); 

,而不是

memcpy(&g_Fvar16, &struct_var, sizeof(float)*16); 

(注意:第一&

+0

啊..傻我!! – Adorn

3

您可以使用

float *ptr = &(struct_var.m[0][0]); 

對於「轉換」。您可能甚至可以避免執行該複製,只需將該轉換的指針傳遞給該程序即可(但這需要您正確處理生命週期,即struct實例應保持足夠長的時間才能使用該數據)。

+1

只要'float * ptr =&struct_var;'也可以做到,因爲'm'是** 1st **成員。 – alk

+0

ya ..這是真的,如果我想使用它作爲float *,但它的參數爲一些其他函數,它接受float *。這會在這種情況下工作..? – Adorn

+2

@alk:這是一個類型錯誤(你需要做一個'cast'來避免它......但如果你只能傳遞正確元素的地址,爲什麼會變得混亂?) – 6502