2015-01-12 59 views
1
struct student{ 
    int id; 
    int score; 
}; 

struct student* allocate(){ 
    /*Allocate memory for ten students*/ 
    struct student *dynamicStudent = malloc(10 * sizeof(struct student)); 
    /*return the pointer*/ 
    return dynamicStudent; 
} 

int main(){ 
    struct student* stud = NULL; 

    /*call allocate*/ 
    stud = &allocate(); 

上面代碼中說「stud = & allocate();」是它給左值錯誤的地方。這是我必須做的指針分配的一部分,我無法弄清楚如何解決這個問題。任何幫助將不勝感激。C錯誤:需要作爲一元'&'操作數使用左值(使用指針)

回答

0

分配返回一個指針,所以你不需要使用&。

4

您的函數調用不正確。
變化

stud = &allocate(); 

stud = allocate(); 

struct student* allocate (void) 
{ 
    /* Allocate memory for ten students */ 
    struct student *dynamicStudent = malloc(10 * sizeof(struct student)); 

    /* Return the pointer */ 
    return dynamicStudent; 
} 

因爲你的函數allocate (void);返回struct student類型的指針,可以收集stud返回值是相同類型的。

int main (void) 
{ 
    /* call allocate */ 
    struct student* stud = allocate();   // <-- Correct Function Call 

    // …code using stud… 

    free(stud); // Don't forget to free what you allocate 

    return 0; 
} 
1

&運營商期望的左值(指的是一個對象的表達式)的操作數,其中作爲該函數返回的r值和施加&操作者的r值操作數將導致一個錯誤。正如其他人在您的案例中指出的,可以通過省略&運營商來解決。

相關問題