我有一個數組'y'與x號。 (數字'x'由用戶給出),我需要創建一個結構數組,其元素的類型與數組'y'中的元素完全相同,即結構數組將具有'x'元素。動態名稱結構變量C
0
A
回答
0
如果我理解你是正確的,你有一個類型的「數組」,元素的數量由用戶決定。我猜你給它分配使用malloc
這樣的:
type_of_y *y = malloc(x * sizeof(type_of_y));
現在要創建一個從結構類似的「陣列」,與相同數量的元素。爲什麼你不能像y
那樣做呢? I.e:
struct my_structure *new_array = malloc(x * sizeof(struct my_structure));
0
您可能需要一個像這樣的結構。陣列的類型顯示爲ArrayType
;你可以寫int
或double
或其他任何適合你的東西。
typedef struct array
{
size_t num_elements; // stores the 'x' value
ArrayType *arr_elements;
} array;
然後可以分配該類型的數組:
array *list = calloc(sizeof(array), number);
for (int i = 0; i < number; i++)
{
list[i].arr_elements = malloc(sizeof(*list[i].arr_elements) * array_size);
list[i].num_elements = array_size;
}
您應該錯誤檢查內存分配:
if (list == 0)
...error...
if (list[i].arr_elements == 0)
{
...release already allocated space...
...error...
}
注意,在陣列的list
(可能每個陣列不是名稱的最佳選擇)可以有不同數量的元素; num_elements
告訴你特定數組有多大。
請注意,C99 靈活陣列成員在這裏並不是真的有幫助。你不能擁有一個包含靈活數組成員的結構數組,儘管你可以有一個指向數組的指針。
+0
當你設置結構的兩個部分後,使用'calloc()'沒有優化:) – Eregrith 2012-04-16 13:20:29
0
/* new array */
MYSTRUCT *abc = (MYSTRUCT *)calloc(x, sizeof(MYSTRUCT));
/* copy contents of 'y' into new array */
for (int i = 0; i < x; i++)
abc[i] = y[i];
相關問題
- 1. AngularJS NG-結合動態變量名稱
- 2. 動態名稱變量java(創建結構的解析器)
- 3. 結構名稱不遮蔽變量名
- 4. 動態變量名稱Coldfusion
- 5. 動態變量名稱EL
- 6. 動態名稱變量
- 7. 動態變量名稱
- 8. 動態變量名稱
- 9. 動態變量名稱Javascript
- 10. 動態JavaScript變量名稱
- 11. PHP動態變量名稱
- 12. Ruby動態變量名稱
- 13. 動態構造變量名
- 14. Matlab:結構中變量的名稱
- 15. 結構類型和變量名稱
- 16. 訪問結構變量的名稱
- 17. 動態變量名稱 - 變化
- 18. Matlab:結構的動態名稱
- 19. PHP將動態變量名稱修改爲靜態變量名稱
- 20. sas中的動態變量名稱
- 21. Jquery Json動態變量名稱生成
- 22. R:動態變量名稱比較
- 23. 如何使用動態變量名稱?
- 24. Javascript中的動態變量名稱
- 25. SAS:動態設置變量名稱
- 26. 動態聲明變量名稱
- 27. SQL中的動態變量名稱
- 28. 用動態名稱創建變量
- 29. dplyr - mutate:使用動態變量名稱
- 30. 如何動態更改變量名稱?
不錯。你有什麼問題? – AusCBloke 2012-04-16 12:40:26
如果你有一個數組,你必須有一個長度來安全地使用它。爲什麼不能分配一組相同長度的結構? – 2012-04-16 12:48:12