Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么scanf必须使用操作员的地址_C_Scanf_Addressof - Fatal编程技术网

为什么scanf必须使用操作员的地址

为什么scanf必须使用操作员的地址,c,scanf,addressof,C,Scanf,Addressof,正如标题所说,我总是想知道为什么scanf必须使用操作员(&)的地址 因为C只有“按值传递”参数,所以要传递一个“变量”将值放入其中,您必须传递它的地址(或指向该变量的指针)。因为它需要地址来放置它读取的值。如果将变量声明为指针,scanf将不需要&当您使用标准输入设备(通常是键盘)输入内容时,通过的数据必须存储在某处。您必须指向内存中的某个位置,以便将数据存储在那里。要指向内存位置,需要该位置的地址。因此,您必须使用&运算符和scanf()传递变量的地址,其他人都很好地描述了sscanf需要将

正如标题所说,我总是想知道为什么
scanf
必须使用
操作员(&)的
地址

因为C只有“按值传递”参数,所以要传递一个“变量”将值放入其中,您必须传递它的地址(或指向该变量的指针)。

因为它需要地址来放置它读取的值。如果将变量声明为指针,
scanf
将不需要
&
当您使用标准输入设备(通常是键盘)输入内容时,通过的数据必须存储在某处。您必须
指向内存中的某个位置,以便将数据存储在那里。要
指向
内存位置,需要该位置的
地址
。因此,您必须使用
&
运算符和
scanf()

传递变量的地址,其他人都很好地描述了sscanf需要将其输出放在某个地方,但为什么不返回它呢?因为它必须返回很多东西-它可以填充多个变量(由格式驱动),并返回一个int,指示它填充了多少变量。

scanf不接受“运算符(&)的地址”。它需要一个指针。通常,指向输出变量的指针是通过使用scanf调用中运算符的地址获得的,例如

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()处理(&)运算符

我做了一些编辑,请检查