2017-02-28 65 views
0

首先我這樣編寫代碼。但這會得到錯誤。函數綁定與函數外功能的區別

#include <stdio.h> 
int array[2][4]={1,2,3,4,5,8,9,0}; 
int (*p)[4]=NULL; 
p=array; 
int main(){ 

    int j; 
    for(j=0;j<4;j++){ 
    printf("%d",p[1][j]); 
    printf("\n"); 
    } 
    return 0; 
} 

之後,我修改了我的代碼。 我只是把p = array;成int main()

#include <stdio.h> 
int array[2][4]={1,2,3,4,5,8,9,0}; 
int (*p)[4]=NULL; 

int main(){ 
    p=array; 
    int j; 
    for(j=0;j<4;j++){ 
    printf("%d",p[1][j]); 
    printf("\n"); 
    } 
    return 0; 
} 

爲什麼他們有不同的操作?

+2

請添加*錯誤*到你的問題呢! (什麼錯誤) –

+0

也許還要問一些關於錯誤的內容,比如讓你迷惑的單詞的含義! – Sebivor

+0

第一個例子是無效的C和第二個編譯?什麼是問題? – Lundin

回答

2

p=array;語句是一個賦值語句,必須在函數內部執行。

+1

我不是英國本地人,所以我的英語寫作很糟糕。雖然我問清楚問題,但你的回答非常清楚和簡單。謝謝您的回答。 –

0

在這裏,您聲明和定義全球變量

int (*p)[4]=NULL; 

然後你執行代碼(這是禁止任何函數之外)

p=array; 

相反,你可以做到這一點

int (*p)[4]=array; 

或者像這樣明確聲明和定義

int (*p)[4]; 
int (*p)[4] = array; 
+0

啊哈~~我很驚訝,你可以理解我的問題是什麼。我的問題含糊不清。感謝您的明確回答:) –

0
p=array 

是不能的功能外進行賦值語句。 由於聲明應該可以在函數(局部聲明)內部或函數外部(全局聲明)內的任何地方完成,但是隻能在函數內部完成賦值。同時

雖然申報和分配可以在全球進行(就像在你的代碼):

int array[2][4]={1,2,3,4,5,8,9,0}; 
int (*p)[4]=NULL;