簡體   English   中英

C結構,結構指針和適當的初始化

[英]C structs, pointers to structs, and proper initialization

我正在努力將神經網絡模擬器從Perl轉換為C。可以運行,但是我對部分代碼不滿意。 我定義了一個結構網絡(類型定義為NETWORK),該結構網絡包含一個指向雙精度數組的指針和一個指向NEURON的指針數組的指針,這是另一個結構。 它們的定義方式如下:

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始終是/ same /內存位置,所以我一直在重置相同的位置。 當然,我也可以使用malloc強制每個神經元都不同:

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

那行得通,但似乎有點像個麻煩。 我是否應該麻煩使用所有指向我的結構的指針? 有沒有一種方法可以初始化結構指針而不求助於低級的malloc和sizeof?

這正是malloc目的。 當您需要不同數量的特定類型的對象並需要控制它們的分配位置時,可以使用malloc 為什么看起來像個混蛋?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM