我有一个带有int数组的结构,我正在传递给一个函数来初始化数组
像这样的数组结构..typedef struct Container{
struct intArray *P;
int length;
} Container;
typedef struct intArray{
int *array;
int length;
} intArray;
初始化数组的函数 像这样...
int Initializer(intArray *myStruct, int n)
{
myStruct->array = malloc(sizeof(int) * (lengthOfint);
^
If n=55 then length would be 2
//let's just say n=5
myStruct->array[0] = n;
//return 1 if successful
return 1;
}
在另一个函数中,我正在调用初始化函数...
Container *myContainer = malloc(sizeof(Container));
myContainer->P = malloc(sizeof(intArray *) * Some_Defined_Value);
Initializer(&myContainer, 5);
printf("the data that should be at index 0 -> %d\n", myContainer->P.array[0];
我认为printf语句会打印5,但每次编译时都会打印出不同数量的垃圾。我不认为我在struct idea中的结构中掌握了数组。
答案 0 :(得分:1)
您将容器传递给初始化函数,但如果仔细观察,您会看到您正在向指针指向"外部"容器而不是指向所需struct intArray
的指针。您需要Initializer(myContainer->P, 5);
答案 1 :(得分:0)
另请注意,malloc
会返回void *
,所以大部分时间都需要这样的演员:
myStruct->array = (int*)malloc(sizeof(int) * (length);
// ^^^^^^
假设length
是您想要存储在数组中的int数。
答案 2 :(得分:0)
Container
包含指向struct intArray
的指针,在这种情况下,它是struct intArray
数组的开头。但是你用
malloc(sizeof(intArray *) * Some_Defined_Value);
所以malloc返回一个指向内存空间的指针,该指针将指针保存到struct intArray
,因为你使用了sizeof(intArray *)
而不是sizeof(intArray)
(你为{{分配了空间) 1}} 指针的数量)。
此处需要Some_Defined_Value
为sizeof(intArray) * Some_Defined_Value
个Some_Defined_Value
分配空间。
然后你使用
struct intArray
至少应该发出警告,因为您将指针传递给指针到Initializer(&myContainer, 5);
,但struct Container
期望指针到Initializer
,所以这不是你想要的。要初始化struct intArray
数组的第一个元素,请使用:
struct intArray
然后:
Initializer(&(myContainter->P[0]), 5);
此代码无法编译,因为它应该是:
printf("the data that should be at index 0 -> %d\n", myContainer->P.array[0]));
printf("the data that should be at index 0 -> %d\n", myContainer->P[0].array[0]);
访问指针到myContainer->P
。上面的代码意味着您访问struct intArray
数组的第一个元素(元素编号0)。
初始化/访问struct intArray
数组的第二个元素:
struct intArray