2017-06-15 98 views
0

我试图将一个变量传递给一个函数并更改其全局值,但它不起作用。下面是简化的代码:将变量传递给一个函数并更改其全局值

int main() 
{ 
    int *Num = malloc (sizeof (int)); 
    ChangeValue(&Num); 
    printf("Number is %i\n", Num); 
} 


int ChangeValue(int *temp) 
{ 
    *temp = 10 
} 

的错误信息是:

 expected 'int *' but argument is of type 'int **' 

我试图改变功能到int ChangeValue(INT **温度)但收到以下错误:

 warning: assignment makes pointer from integer without a cast. 

有什么建议吗?

+2

'有什么建议吗?'阅读错误信息。这很清楚...... – John3136

+1

@ John3136当你刚刚出发时,C很少。 – Schwern

回答

3

int *Num表示Num的类型为int *。由于它已经是一个整数指针,所以当你将它传递给需要int *的函数时,不需要再次使用它的地址。

ChangeValue(Num); 

OTOH,因为它是一个指针,你将不得不取消对它的引用与printf使用它作为一个整数,等等。

printf("Number is %i\n", *Num); 
+1

谢谢你的回答。我做了你刚刚说的和代码工作。但是,我收到了两条警告消息。 警告:函数的隐式声明'ChangeValue' 警告:'ChangeValue'的冲突类型 –

+1

@AfshinAhmadi C在使用函数之前必须知道函数的签名。否则,它会猜测(这是隐含的警告),通常是不正确的,并且在它最终看到该函数并且它不符合它的猜测时会感到困惑。通过在main()之前移动ChangeValue()或在main()之前声明ChangeValue()的原型来实现此目的。我建议前者,它更简单,重复性更低。 – Schwern

+1

问题解决了。非常感谢你! –

2

变量Num是一个指向一个int(int*)。函数ChangeValue(int*)需要一个指向int的指针(int*)。但是,您正在向它传递一个指向Numint**)的指针。

简短的回答:在ChangeValue(&Num);

朗答案Num之前删除&:你似乎有了解如何工作的指针,你可能要在继续之前阅读更多有关这是一个问题。

+1

非常感谢,Tommalla。你是对的,我仍然是C编程新手。 –

相关问题