2013-12-12 97 views
-4

我發現下面的示例代碼,演示如何使用的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。 從我讀過的內容來看,&符號是以這種方式在一個指針變量上使用的,以便說「不要改變指針指向的位置,而是改變指針已經指向的地址的值」。

雖然這很有趣,因爲dayyear不是指針。他們只是簡單的ints。爲什麼不能寫成:

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

+6

閱讀基本C教程的時間... –

+0

提示:scanf的參數是什麼? – devnull

+0

因爲沒有'&'s它們是按值傳遞的。 Scanf需要寫入它們,所以它需要引用它們可以寫入的指針。 – Rup

回答

1

你誤會了。 &獲得東西的地址,即&date返回一個指向日期的指針。

1

在本例中,您將變量的地址傳遞給函數。通過這種方式,該功能可以修改變量的內容。

特別是,sscanf分析輸入中的字符串並將值寫入指定的地址。

2

&字符表示「地址」。因此,您在sscanf中所做的是提供地址來存儲掃描數據:weekdaymonth是字符串,因此對weekday的引用而不是*weekday只是使用地址而不是值。由於dayyearint s而不是int* s,因此您需要使用&符號來提供地址。

&day的數據類型爲int*

0

在上面的情況下,日和年是值,所以它需要&作爲存儲值,但是周和月的地址(即週日==週日[0]),因此不需要&符號。

相關問題