2013-10-30 89 views
1

我有以下代码:在函数参数递增指针

int x; 
int * xPtr = &x; 

int * Get_xPtr(void); 
void someFunction(int * y); 

int * Get_xPtr(void) 
{ 
    return xPtr; 
} 

void someFunction(int * y) 
{ 
    ... 
    ... 
} 

void main(void) 
{ 
    someFunction(++Get_xPtr()); 
} 

此代码是没有的功能Get_xPtr()的返回值(地址)增量编译罚款,但与增量出现错误:

“错误:左值需要作为递增操作数”

我想这是不允许的语法,但是为什么呢?是否有任何其他方式做到这一点还是需要到:

int * tempPtr = GetxPtr(); 
tempPtr++; 
someFunction(tempPtr); 
+3

'someFunction(Get_xPtr()+ 1)' –

+0

@KerrekSB :你说得对,那是有效的。为什么编译器不解释++和+1? – Phat

+2

因为您无法写入临时表达式。 – Joshua

回答

2
someFunction(++Get_xPtr()); 

++Get_xptr()需要左值来存储返回值。

简单的例子会做出一些澄清

int i=0; 
++i; ==>i=i+1; //result stored in i. 

变量i可以改变

++5; //where is lvalue ? 

您可以使用

someFunction(Get_xPtr()+1);