2015-08-26 40 views
2

我已經在main()中聲明瞭一個結構。我想將結構的地址傳遞給一個函數。它顯示結構沒有聲明錯誤。我知道如果一個結構是在main()內聲明的,它的範圍是有限的。但在這裏,我將這個地址傳遞給函數。它仍然顯示一個錯誤,銀行*未知的大小。我應該怎麼做來傳遞在main中聲明的結構地址?這裏是我的代碼:將結構的地址傳遞給函數

#include <stdio.h> 

#include <stdlib.h> 

#include <string.h> 

void edit_data(struct bank *acc_data) 

{ 
    int loop; 
    for(loop=0;loop<200;loop++) 
    { 
     *(acc_data+loop).acc_no = 1000+loop; 
     (acc_data+loop).name = "a1"; 
     (acc_data+loop)->balance = 1000; 
    } 
}; 

int main() 
{ 
    int loop; 

    struct bank 
    { 

     long acc_no; 

     char name[80]; 

     int balance; 

    }data[200]; 

    edit_data(data); 
} 

回答

3

你在混合變量的聲明和變量類型的聲明。 你的函數應該知道類型,這個類型目前在程序的主要部分中聲明。爲了解決這個問題,聲明式的全局空間:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct bank 
{ 
    long acc_no; 
    char name[80]; 
    int balance; 
}; 

void edit_data(struct bank *acc_data) 
{ 
    int loop; 
    for(loop=0;loop<200;loop++) 
    { 
     (acc_data+loop)->acc_no = 1000+loop; 
     strcpy(&(acc_data+loop)->name , "a1"); 
     (acc_data+loop)->balance = 1000; 
    } 
}; 
int main() 
{ 
    int loop; 
    struct bank data[200]; 
    edit_data(data); 
} 

請注意,您在編輯數據功能也有一些指針錯誤....

這也是通常最好使用數組而不是在這種情況下的指針:

void edit_data(struct bank *acc_data) 
{ 
    int loop; 
    for(loop=0;loop<200;loop++) 
    { 
     acc_data[loop].acc_no = 1000+loop; 
     strcpy(acc_data[loop].name , "a1"); 
     acc_data[loop].balance = 1000; 
    } 
};