2015-12-21 178 views
1

我定义了一个结构,我称之为Neuron将二维数组转换为指针

在我的主,我创建了一个二维数组:

Neuron N_network[4][10]; //create a neural network 

我有一个函数来打印结构元素:

void print_stat_neuron(Neuron * neuron_info) 

我应该怎么写打印N_network[i][j](作为参数print_stat_neuron()函数)? 我试着简单地使用&(N_network[i][j]),我收到一条错误消息。

我与编译器休耕错误消息的gcc -Wall -Wextra:

2ex4.c: In function 'init_network': 
2ex4.c:168:2: warning: implicit declaration of function'print_stat_neuron' [-Wimplicit-function-declaration] 
print_stat_neuron(&N_network[4][1]); 
^ 
2ex4.c: At top level: 
2ex4.c:191:6: warning: conflicting types for 'print_stat_neuron' [enabled by default] 
void print_stat_neuron(Neuron * neuron_info) 
^
2ex4.c:168:2: note: previous implicit declaration of 'print_stat_neuron' was here 
print_stat_neuron(&N_network[4][1]); 
+0

什么是错误讯息?查看错误消息的文本总是有帮助的;如果十个目录深度(但文件的基本名称是合理的),则查看整个文件名并不一定有帮助。 –

+1

在第一次调用函数时,您还需要在代码中提前放置函数声明 –

回答

1

您展示来自使用前不声明函数的错误信息,所以编译器推导的功能型(extern int print_stat_neuron();无规范参数的数量或类型),然后使用返回类型void定义它。请注意,在C中,extern int print_stat_neuron();不是没有参数的函数的原型;那是extern int print_stat_neuron(void);

此代码编译干净:

typedef struct Neuron 
{ 
    int x; 
} Neuron; 

void print_stat_neuron(Neuron *neuron_info); 

int main(void) 
{ 
    Neuron N_network[4][10]; 
    for (int i = 0; i < 4; i++) 
    { 
     for (int j = 0; j < 10; j++) 
      print_stat_neuron(&N_network[i][j]); 
    } 
    return 0; 
} 

这在使用它之前宣称的功能。在使用它之前定义函数也是可以接受的(这节省了单独的声明)。当然,如果该函数将在定义它的源文件之外使用,它应该在头文件中声明一个头文件,头文件应该在定义的位置和使用位置处使用。如果该函数未在定义它的源文件之外使用,则应为static

清洁编译使用GCC 5.3.0在Mac OS X 10.10.5检查(我埃尔卡皮坦机器在保修期内维修,不幸):

$ gcc -std=c11 -O3 -g -Wall -Wextra -Werror -Wmissing-prototypes -Wstrict-prototypes \ 
>  -Wold-style-definition -c neuron.c 
$ 
2

您需要的参数更改为Neuron (*neuron_info)[10]。现在,你可以调用这个函数作为

print_stat_neuron(N_network); 

print_stat_neuron(&N_network[0]);  
+0

我不想使用all数组,而只使用单个元素。 – White

+1

为什么这将是必要的? –

+0

当然,但我总是可以用其他方式做,但我很好奇。 – White