我有一个数组'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