首页 文章

C结构,指向结构的指针和正确的初始化

提问于
浏览 258
0

我正在努力将神经网络模拟器从Perl转换为C.我有它工作,但我对我的部分代码不满意 . 我已经定义了一个结构网络(typedefed to NETWORK),它包含一个指向双精度数组的指针和一个指向NEURONs指针数组的指针,这是另一个结构 . 以下是它们的定义方式:

typedef struct neuron {
    double *inputweights;
    double *neuronweights;
    double value;
} NEURON; 

typedef struct network {
    NEURON **neurons;
    double *outputs;
} NETWORK;

最初,我试图像这样初始化这些:

NEURON* myvariable;

但当然这没有用,因为实际上没有分配内存 . 我知道我可以像这样初始化它:

NEURON myvariable;
NEURON* ptr = &myvariable;

但是,当我尝试将其转换为循环,并将指针存储在数组中时,似乎先前的指针丢失或重置每次迭代,我得到了各种错误 . 我做的是这样的:

NETWORK mynetwork;
for (i = 0; i < NEURON_COUNT; i++) {
    NEURON myneuron;
    reset_neuron(&myneuron); // Basically a zero fill of the arrays
    mynetwork->neurons[i]=&myneuron;
    myneuron->inputweights[0] = 1; // Sets the current neuron, first input
    printf("First neuron, first input is %f\n", mynetwork->neurons[0]->inputweights[0]);
    // The printf gives 1 on the first iteration, and 0 on every following iteration.
}

这给我的印象是myneuron总是/同一/内存位置,即使我仍然保持指向最后一个的指针,所以我一直在重置同一个地方 . 当然我也可以使用malloc强制每个神经元不同:

NEURON* myvariable = malloc(sizeof(NEURON));

这有效,但这似乎有点像kludge . 我是否应该忙着使用我的结构指针?有没有办法初始化结构指针而不诉诸低级malloc和sizeof?

1 回答

  • 3

    这正是 malloc 的用途 . 当您需要特定类型的不同数量的对象并需要控制它们的分配位置时,请使用 malloc . 为什么它看起来像一个kludge?

相关问题