我有一個數組'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. 動態變量名稱
- 3. PHP動態變量名稱
- 4. 動態變量名稱Coldfusion
- 5. 動態變量名稱EL
- 6. 動態變量名稱
- 7. Ruby動態變量名稱
- 8. Matlab:結構中變量的名稱
- 9. 結構類型和變量名稱
- 10. 訪問結構變量的名稱
- 11. Jquery Json動態變量名稱生成
- 12. SQL中的動態變量名稱
- 13. js獲取php動態名稱變量
- 14. 用動態名稱創建變量
- 15. R:動態變量名稱比較
- 16. 動態分配變量名稱JavaScript
- 17. sas中的動態變量名稱
- 18. 動態變量名稱與更少
- 19. 如何使用動態變量名稱?
- 20. 用動態名稱檢查Bash變量
- 21. python中的動態變量名稱
- 22. dplyr - mutate:使用動態變量名稱
- 23. Javascript對象:動態變量名稱?
- 24. 結構C++,動態名施工
- 25. 帶有變量的DisplayAttribute名稱,動態顯示名稱
- 26. 在objective-c中動態創建變量名稱
- 27. 如何在C#中使用動態名稱創建變量?
- 28. Powershell:通過動態變量名稱獲取變量
- 29. 使用獨特的動態變量名稱(不是變量值!)
- 30. 動作變量名稱
不錯。你有什麼問題? – AusCBloke 2012-04-16 12:40:26
如果你有一個數組,你必須有一個長度來安全地使用它。爲什麼不能分配一組相同長度的結構? – 2012-04-16 12:48:12