这里我尝试通过将数组分配给指针引用来创建矩阵:
bb_ANN(int num_Weights, int num_Layers, int num_Nodes, double * inputs){
//create an array that will hold pointers
struct ANN_Node *layer[num_Layers];
//create an array of nodes
struct ANN_Node **arr = malloc(sizeof(struct ANN_Node **) *num_Layers);
//initialize Nodes
for(int i=0;i<num_Layers;i++)
{
// layer heads
layer[i] = ANN_Init_Node(num_Weights);
for(int j=0; j<num_Nodes;j++)
//push nodes into each layer head
{ push_ANN_Node(&layer[i],num_Weights); }
// converting each list into an array, then each embedding into arr[]
arr[i] = arrayOfList(layer[i]);
}
printf("f(x):%f ", arr[0][1].weights[0]);
////////////
这是arrayOfList定义:
struct ANN_Node *arrayOfList(struct ANN_Node *listP){
int i = lengthOfList(listP) ; //make i the length of the list
struct ANN_Node **ptr= malloc(sizeof(struct ANN_Node **) *i);
for(i=0;listP != NULL;listP=listP->next,i++)
{ ptr[i] = listP; }
return ptr;
}
现在我要做的是制作一种“ANN_Nodes&#39; :
-->[ 0 0 0 ]
-->[ 0 0 0 ]
-->[ 0 0 0 ]
其中,我创建了一个循环,遍历每一层并插入一个我的arrayOfList函数将返回的数组。
现在有了这样的结果:
arr[0][0].weights[0]
这很好。
这是arr[1][0].weights[0]
和arr[2][0].weights[0]
等等。
但我实际上没有创建二维的东西:arr[0][1].weights[0]
这是一个失败和一个段错误。
我试图做的事情是否有意义,是否可行,以及我如何实际实现二维数组结构以便我可以继续实现我的目的?
PS。我已经检查了多维数组,但我认为我的情况与我在互联网上找到的大多数示例和教程有点不同,我试图将返回的数组注入到数组中,如果这样做有意义的话。
答案 0 :(得分:1)
如果您的arrayOfList
函数创建了一个“数组”指针,并使ptr
指向该内存。
然后你做return *ptr;
等于return ptr[0];
。也就是说,您返回指向单个元素的单个指针。 “数组”的其余部分将丢失。
如果你想在C中使用动态的“二维数组”指针,你需要成为一个three-star programmer,因为它(在你的情况下)是struct ANN_Node ***
类型。
然后arrayOfList
应该返回struct ANN_Node **
,即ptr
(而不是*ptr
)。