【发布时间】:2020-05-12 10:42:25
【问题描述】:
在这篇文章(Why the result of this code is the same when the arg is different?)中,chg的参数是yay *lol,里面是lol(注意前面没有星号)。但是为什么在这段代码中,它会显示一个错误?
void chg (int *lol) {lol=9;}
int main ()
{
int a=5;
int *boi=&a;
printf ("%d\n", *boi);
chg (boi);
printf ("%d\n", *boi);
return 0;
}
[Error] invalid conversion from 'int' to 'int*' [-fpermissive]
那么,参数中不同的数据类型意味着它的工作方式不同?
【问题讨论】:
-
void chg(int* lol) { lol = 9; }:lol是一个指针,而您正在将一个int分配给一个指针。你可能想要这个:void chg(int* lol) { *lol = 9; } -
究竟为什么没有星号?
-
@Jabberwocky @klutt 对不起,如果我的问题有点不清楚,我知道这个页面中的代码需要像@Jabberwocky 所说的那样在lol 前面加上星号,但是为什么在我的另一篇文章中是( stackoverflow.com/questions/61747555/…) 不需要星号?参数是
yay *lol,在里面,它必须是lol->val,如果我做它会报错[Error] base operand of '->' has non-pointer type 'yay'? -
你混淆了指针、结构和指向结构的指针。阅读 C 教科书中处理指针的章节。简答
(*foo).bar与foo->bar相同,但第一种形式几乎从未使用过。
标签: c function pointers parameter-passing