- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力将神经网络模拟器从 Perl 转换为 C。我可以正常工作,但我对我的部分代码不满意。我已经定义了一个结构网络(类型定义为 NETWORK),它包含一个指向 double 组的指针和一个指向神经元指针数组的指针,这是另一个结构。以下是它们的定义方式:
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
。为什么它看起来像一个拼凑?
关于C 结构、指向结构的指针和适当的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7799347/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!