gpt4 book ai didi

将数组的指针更改为更大的数组

转载 作者:行者123 更新时间:2023-11-30 20:24:50 25 4
gpt4 key购买 nike

所以我正在尝试尝试人工神经网络,或者至少触及表面。但这是我的问题,我找不到增加包含其他“神经元”指针的数组大小的方法。

这是我用于扩展人工神经元大小的代码。

void extendNeuron(NeuronPtr *base, NeuronPtr * dest) { 
(*(*base)->axon[sizeof((*base)->axon) / sizeof(*(*base)->axon) - 1]) = *dest;

struct Neuron *** newAxon[sizeof((*base)->axon) / sizeof(*(*base)->axon) + 1];

memcpy(newAxon, (*base)->axon, sizeof((*base)->axon));

**(*base)->axon = ***newAxon;
}

这是我的神经元的结构

struct Neuron{
char label[100];
struct Neuron **axon[1];
};

现在我的想法是创建另一个比当前数组大(增加 1)的指针数组(struct Neuron **axon),然后将轴突的指针更改为该数组。但我不知道该怎么做。

到目前为止,这是我的代码:

  struct Neuron ** newAxon[sizeof((*base)->axon) / sizeof(*(*base)->axon) + 1]; //newAxon is supposed to be bigger than the axon of base 

memcpy(newAxon, (*base)->axon, sizeof((*base)->axon)); //then I'm trying to copy the axon of base to the newAxon

**(*base)->axon = ***newAxon; //then change the pointer of axon to newAxon

最佳答案

我将假设以下内容:

  • axon始终通过malloc(或其衍生物之一)创建
  • void extendsNeuron(NeuronPtr *base, NeuronPtr * dest) 在数组末尾添加 dest base->axon
  • axon 数组如果以空指针终止 - 因为在 C 中你无法提取数组的大小,所以你必须将其长度保留在辅助变量中或使用约定来标识最后一个元素(或者两者都像argv)
  • axon 只是指向 Neuron (Neuron **) 的指针数组,而不是 Neuron**[1]

您可以这样初始化一个新的Neuron:

void init(Neuron *neuron, const char *label) {
strncpy(neuron->label, label, sizeof(neuron->label));
neuron->label[sizeof(neuron->label)-1] = '\0'; /* if label was too long */
neuron->axon = malloc(sizeof(Neuron *));
/* control neuron->axon != NULL */
neuron->axon[0] = NULL;
}

您需要一个辅助函数来查找axon数组的长度:

int axon_length(Neuron *neuron) {
int i = 0;
while(neuron->axon[i] != NULL) i++;
return i;
}

然后您可以这样扩展神经元:

void extendNeuron(NeuronPtr *base, NeuronPtr * dest) {
int len = axon_length(base);
Neuron **p = realloc(base->axon, sizeof(Neuron *) * (n+2));
/* test p != NULL ... */
base->axon = p;
p[n] = dest;
p[n+1] = 0;
}

并且不要忘记在释放 Neuron 之前调用 free(neuron->axon) 以避免内存泄漏...

关于将数组的指针更改为更大的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com