我正在尝试将变量传递给函数并更改其全局值,但它不起作用。这是简化的代码:
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.
有什么建议吗?
答案 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*
)的指针。但是,您将指向Num
(int**
)的指针传递给它。
简短回答:在&
Num
之前删除ChangeValue(&Num);
答案很长:你似乎在理解指针是如何工作的时候遇到了问题,在进一步研究之前,你可能想要阅读更多相关信息。