为什么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()处理(&)运算符 我做了一些编辑,请检查