2012-04-21 94 views
0

予跨越程序傳來:功能在C返回指針

int bags[5]={20,5,20,3,20}; 
int main() 
{ 
    int pos=5,*next(); 
    *next()=pos; //problem with this line(should give error :lvalue required) 
    printf("%d %d %d",pos,*next(),bags[0]); 
    return 0; 
} 
int *next() 
{ 
    int i; 
    for(i=0;i<5;i++) 
     if(bags[i]==20) 
      return (bags+i); 
    printf("error"); 
    exit(0); 
} 

輸出到程序是5 20 5雖然我希望它是左值必需的。 任何人都可以告訴原因?

+0

不能在鍵盤上編譯(http://codepad.org/98m9rEjj)。有問題的行確實給出了一個錯誤。你使用了什麼編譯器? – ugoren 2012-04-21 18:52:33

+0

@ugoren從每個句子中刪除兩個'*',這是一個形式化問題。 – MByD 2012-04-21 18:53:24

+0

此代碼不是合法的C代碼。第4行和第5行似乎有語法錯誤。 – ssteinberg 2012-04-21 18:53:29

回答

2

雖然next()沒有左值*next()是,這是一個int,由返回值IF *的next()(which is an int in the bags`陣列)來尋址。

換句話說,雖然不能指定函數的返回值,但可以指定返回值指定的值。

+0

,@ ugoren --how can * next()是一個左值嗎? * next()是函數調用,它返回地址(一個常量)..以及一個常量如何能左值 – Raj 2012-04-22 19:49:10

+0

* next()不會是一個int。它將是一個指向整數值的地址。 – Raj 2012-04-22 19:53:05

+0

不完全是* next()是下一個返回值指向的int變量。 – MByD 2012-04-22 20:24:47

2

next()不是左值,因爲函數返回值不是。
*next()是一個左值,因爲它的值包含在某個已知的內存地址中。無論該地址是作爲函數的返回值還是以其他方式獲得(例如,它存儲在變量中),都無關緊要。

0

解除運算符*的結果是的左值。

「一元*運算符表示間接,如果它指向一個對象,結果是指定對象的左值。」 C99 6.5.3.2/4