2015-12-21 194 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