Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构作为参数传递时出错_C_Function_Pointers - Fatal编程技术网

C 结构作为参数传递时出错

C 结构作为参数传递时出错,c,function,pointers,C,Function,Pointers,后来: void Test(struct NeuralNetwork *nn) { printf("%f", nn->layers[1].neurons[0].internalValue); } printf打印9.0,这是我在“NeuralNetwork()”函数中初始化的,该函数返回一个指针NeuralNetwork*,因此它工作正常 调用Test时,由于尝试读取internalValue(0x999999A),我收到一个读取访问冲突错误 在神经网络函数(构造器基本上)中,

后来:

void Test(struct NeuralNetwork *nn) {
     printf("%f", nn->layers[1].neurons[0].internalValue);
}
printf打印9.0,这是我在“NeuralNetwork()”函数中初始化的,该函数返回一个指针NeuralNetwork*,因此它工作正常

调用Test时,由于尝试读取internalValue(0x999999A),我收到一个读取访问冲突错误

在神经网络函数(构造器基本上)中,我也做了

int inputs = 2;
int hiddenLayers = 3;
int outputs = 1;

struct NeuralNetwork* nn = NeuralNetwork( inputs, hiddenLayers, outputs);

printf("%f", nn->layers[1].neurons[0].internalValue); // prints correctly

Test(&nn); //access violation even tho im trying same print as above
就在“return nn;”之前,这也是printf打印的内容

我可以访问和编辑NeuralNetwork()函数中的所有值(分配内存并初始化所有值,然后返回NeuralNetwork*),我还可以编辑和读取从NeuralNetwork()返回中分配的nn数据(由printf显示)


只有当我将其传递给函数时,我才会遇到问题。

您使用这一行所做的操作:

nn->layers[1].neurons[0].internalValue = 9;
是调用
Test
(它使用指向
struct NeuralNetwork
的指针)和指向
struct NeuralNetwork
的指针。 通常,编译器会发出一个错误/警告,其外观如下:

Test(&nn);
因此,您最终访问了
Test
函数中不应该访问的内容

只需像这样调用
Test

 error: cannot convert NeuralNetwork **' to NeuralNetwork *'.

您正在使用这条线做什么:

nn->layers[1].neurons[0].internalValue = 9;
是调用
Test
(它使用指向
struct NeuralNetwork
的指针)和指向
struct NeuralNetwork
的指针。 通常,编译器会发出一个错误/警告,其外观如下:

Test(&nn);
因此,您最终访问了
Test
函数中不应该访问的内容

只需像这样调用
Test

 error: cannot convert NeuralNetwork **' to NeuralNetwork *'.

在“后面”部分,nn的类型是什么?那么
&nn
的类型是什么?编译器应该对您大喊大叫,不要忽略编译器告诉您的内容。类型为“struct NeuralNetwork*”。struct NeuralNetwork由一组层组成,其中包含一组神经元。神经元有一个双重的内在值,我可以读写,除非我把它传递给测试函数,因为某种原因我不能。所有值都在NeuralNetwork()函数中初始化,该函数返回一个NeuralNetwork*,然后将nn分配给它。是的,
nn
的类型是
struct NeuralNetwork*
。这意味着
&nn
的类型是
struct NeuralNetwork**
。现在,您的
Test
函数接受的参数类型是什么?您真的应该在调用中使用运算符
的地址吗?接受NeuralNetwork*的测试函数没有抱怨,如果编译器没有抱怨传递的类型和函数参数类型不匹配,那么要么你没有正确声明函数,要么你的编译器有严重缺陷。
struct-NeuralNetwork*
struct-NeuralNetwork**
不同。在“后面”部分,nn的类型是什么?那么
&nn
的类型是什么?编译器应该对您大喊大叫,不要忽略编译器告诉您的内容。类型为“struct NeuralNetwork*”。struct NeuralNetwork由一组层组成,其中包含一组神经元。神经元有一个双重的内在值,我可以读写,除非我把它传递给测试函数,因为某种原因我不能。所有值都在NeuralNetwork()函数中初始化,该函数返回一个NeuralNetwork*,然后将nn分配给它。是的,
nn
的类型是
struct NeuralNetwork*
。这意味着
&nn
的类型是
struct NeuralNetwork**
。现在,您的
Test
函数接受的参数类型是什么?您真的应该在调用中使用运算符
的地址吗?接受NeuralNetwork*的测试函数没有抱怨,如果编译器没有抱怨传递的类型和函数参数类型不匹配,那么要么你没有正确声明函数,要么你的编译器有严重缺陷。
struct-NeuralNetwork*
struct-NeuralNetwork**
不同。现在可以工作了。我认为&被用来将指针传递到函数中(它给出了一个地址),我想这是有意义的,它给出了指针本身的地址,它是一个双指针(**)。对于C来说是相当新的:P@LukaKostic:欢迎来到C编程社区,快乐学习。Yay现在工作。我认为&被用来将指针传递到函数中(它给出了一个地址),我想这是有意义的,它给出了指针本身的地址,它是一个双指针(**)。对于C来说是相当新的:P@LukaKostic:欢迎来到C编程社区,快乐学习。