我找到了以下示例代码,演示sscanf()
对TutorialPoints的使用:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
我对&day
,&year
中&符号的使用感到困惑。
从我所读到的,&符号以这种方式用在指针变量上,以便说“不要改变指针指向的位置,而是改变指针指向的地址处的值”。 / p>
虽然这很有趣,因为day
和year
不是指针。它们很简单ints
。为什么不能写成:
...
sscanf( dtm, "%s %s %d %d", weekday, month, day, year );
...
答案 0 :(得分:2)
&符号表示“地址”。因此,您在sscanf
中所做的工作是提供存储扫描数据的地址:weekday
和month
是字符串,因此引用weekday
而不是{{ 1}}只是使用地址而不是值。由于*weekday
和day
是year
而不是int
,因此您需要使用&符号来提供地址。
int*
的数据类型为&day
。
答案 1 :(得分:1)
&
获取某些内容的地址,即&date
返回指向日期的指针。
答案 2 :(得分:1)
在此示例中,您将变量的地址传递给函数。通过这种方式,该函数能够修改变量的内容。
特别是,sscanf在输入中解析字符串并将值写入指定的地址。
答案 3 :(得分:0)
在上述情况下,日和年是值,所以它是必需的&amp;用于存储值,但是周和月是地址(即工作日==工作日[0])所以&amp;符号不需要。