为什么在这些变量前面使用了&符?

时间:2013-12-12 11:53:39

标签: c pointers ampersand

我找到了以下示例代码,演示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>

虽然这很有趣,因为dayyear不是指针。它们很简单ints。为什么不能写成:

...
 sscanf( dtm, "%s %s %d  %d", weekday, month, day, year );
...

4 个答案:

答案 0 :(得分:2)

&符号表示“地址”。因此,您在sscanf中所做的工作是提供存储扫描数据的地址:weekdaymonth是字符串,因此引用weekday而不是{{ 1}}只是使用地址而不是值。由于*weekdaydayyear而不是int,因此您需要使用&符号来提供地址。

int*的数据类型为&day

答案 1 :(得分:1)

你误解了。 &获取某些内容的地址,即&date返回指向日期的指针。

答案 2 :(得分:1)

在此示例中,您将变量的地址传递给函数。通过这种方式,该函数能够修改变量的内容。

特别是,sscanf在输入中解析字符串并将值写入指定的地址。

答案 3 :(得分:0)

在上述情况下,日和年是值,所以它是必需的&amp;用于存储值,但是周和月是地址(即工作日==工作日[0])所以&amp;符号不需要。