我正在將神經網絡模擬器從Perl轉換爲C。我已經開始工作了,但我對部分代碼並不滿意。我定義了一個struct網絡(typedefed爲NETWORK),它包含一個指向雙精度數組的指針和一個指向NEURONs指針數組的指針,這是另一個結構體。這裏是他們是如何定義的:C結構體,結構體的指針以及正確的初始化
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));
而且這樣的作品,但似乎有點像雜牌。我應該困擾於使用指向我的結構的指針嗎?有沒有辦法初始化一個結構指針,而不訴諸低級malloc和sizeof?
我知道你想要'NEURON myneuron'是某種形式的聲明 - 它是,但是在循環結束後,你的對象也會消失。這就是爲什麼我們有malloc – fazo
酷,一個隨機忍者downvote到一個兩歲的問題。 – Dan