为什么scanf必须采用运算符的地址
正如标题所说,我总是想知道为什么scanf
必须采用运算符(&)的address of
。
因为C只有“pass-by-value”参数,所以要传递’变量’来放入一个值,你必须传递它的地址(或指向变量的指针)。
scanf不接受“运算符(&)的地址”。 它需要一个指针 。 通常,通过在scanf调用中使用address-of运算符来获取指向输出变量的指针,例如
int i; scanf("%i", &i); printf("number is: %d\n", i);
但这不是唯一的方法。 以下内容同样有效:
int* iPtr = malloc(sizeof(int)); scanf("%i", iPtr); printf("number is: %d\n", *iPtr);
所以是:
int i; int iPtr = &i; scanf("%i", iPtr); printf("number is: %d\n", i);
因为它需要地址来放置它读取的值。 如果将变量声明为指针,则scanf
将不需要&
。
当您使用标准输入设备(通常是键盘)输入内容时,必须将通过的数据stored
某处。 您必须point
内存中的某个位置,以便可以将数据存储在那里。 要point
内存位置,您需要该位置的address
。 因此,您必须使用带有scanf()
&
运算符传递变量的地址。
其他人都很好地描述了sscanf需要将其输出放在某个地方 ,但为什么不归还呢? 因为它必须返回许多东西 – 它可以填充多个变量(由格式驱动)并返回一个int,表示它填充了多少变量。
因为值将被存储在(在哪里?),在内存地址中。 所以scanf()处理(&)运算符。