将变量传递给函数并更改其全局值

时间:2017-06-15 23:25:11

标签: c

我正在尝试将变量传递给函数并更改其全局值,但它不起作用。这是简化的代码:

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 ** temp),但收到以下错误:

        warning: assignment makes pointer from integer without a cast.

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

int *Num表示Num的类型为int *。由于它已经是一个整数指针,因此当您将其传递给带有int *的函数时,无需再次获取其地址。

ChangeValue(Num);

OTOH,因为它是一个指针,你必须取消引用它才能将它用作整数,就像使用printf一样。

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

答案 1 :(得分:2)

变量Num是指向int(int*)的指针。函数ChangeValue(int*)获取指向int(int*)的指针。但是,您将指向Numint**)的指针传递给它。

简短回答:在&

中的Num之前删除ChangeValue(&Num);

答案很长:你似乎在理解指针是如何工作的时候遇到了问题,在进一步研究之前,你可能想要阅读更多相关信息。