Why scanf must take the address of operator
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.
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).
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 &
.
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);
Likewise we can do the same thing with the following code:
int i;
int *iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);