Why scanf must take the address of operator

a 夏天 提交于 2019-11-26 07:44:51

问题


As the title says, I always wonder why scanf must take the address of operator (&).


回答1:


Because C only has "pass-by-value" parameters, so to pass a 'variable' to put a value into, you have to pass its address (or a pointer to the variable).




回答2:


scanf does not take "the address of operator (&)". It takes a pointer. Most often the pointer to the output variable is gotten by using the address-of operator in the scanf call, e.g.

int i;
scanf("%i", &i);
printf("number is: %d\n", i);

But that is not the only way to do it. The following is just as valid:

int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);

So is:

int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);



回答3:


Because it needs the address to place the value it reads. If you declare you variable as a pointer, the scanf will not need the &.




回答4:


Everyone else has described well that sscanf needs to put its output somewhere, but why not return it? Becuase it has to return many things - it can fill in more than one variable (driven by the formatting) and it returns an int indicating how many of those variables it filled in.




回答5:


When you input something with standard input device (usually keyboard), the data that comes through must be stored somewhere. You must point somewhere in the memory so that data can be stored there. To point a memory location, you need the address of that location. So you must pass your variable's address by using & operator with scanf().




回答6:


as the value is going to be stored,(where?), in the memory address. so scanf() deals with (&) operator.



来源:https://stackoverflow.com/questions/3893615/why-scanf-must-take-the-address-of-operator

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!