在这里,我尝试通过将数组分配给指针参考来创建一个矩阵:
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"的一种矩阵:
-->[ 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]
这是一个失败和segfault。
我试图做的事情是否有意义,这是可行的吗?
ps。我已经检查了多维阵列,但是我认为我的情况与我在互联网上找到的大多数示例和教程有所不同,我试图将返回的数组注入阵列和数组,如果有意义。。
如果您的 arrayOfList
功能您创建一个指针的"数组",然后将ptr
指向该内存。
然后,您执行等于return ptr[0];
的return *ptr;
。也就是说,您将单个指针返回到一个元素。其余的"数组"将丢失。
如果您想要C中的指针的动态" 2D数组",则需要成为三星级程序员,因为(在您的情况下(类型struct ANN_Node ***
。
然后arrayOfList
应返回struct ANN_Node **
,即ptr
(而不是*ptr
(。