% 是 *printf/*scanf 系列函式所約定的格式字串的轉換指定(或稱轉換說明)的開頭。
這些函式在分析到字串中的 % 時,才會進一步根據後面的字元序列,確定下個引數的型別和輸入輸出格式。
注意這些函式使用變長引數,從而函式自身是無法直接辨別實參型別的,只能透過各種額外約定確認型別。格式字串的存在有一部分就是為此目的。
一元 & 是取址運算子, C 中應用的場所非常多,不僅出現於 scanf 系列中。它作用於左值表示式(潛在地指代物件的表示式),結果是指向該物件的指標值。
C 中直接傳遞某個物件的話,函式內部假如修改它,則修改的是物件複製後的副本,不會影響原物件。要修改某個待確定的物件,需要傳遞指向它的指標。 scanf 系列中使用 & 就是為了這麼做。
值得注意的 scanf 系列用對應 %s 系列的轉換指定時,若要寫入字元陣列 str ,則實參應該用 str 而非 &str 。因為此類指定對應指首向字元的指標(字元陣列會隱式轉換過去),而非指向整個字元陣列的指標。
詳細可以參考這些:
% 是 *printf/*scanf 系列函式所約定的格式字串的轉換指定(或稱轉換說明)的開頭。
這些函式在分析到字串中的 % 時,才會進一步根據後面的字元序列,確定下個引數的型別和輸入輸出格式。
注意這些函式使用變長引數,從而函式自身是無法直接辨別實參型別的,只能透過各種額外約定確認型別。格式字串的存在有一部分就是為此目的。
一元 & 是取址運算子, C 中應用的場所非常多,不僅出現於 scanf 系列中。它作用於左值表示式(潛在地指代物件的表示式),結果是指向該物件的指標值。
C 中直接傳遞某個物件的話,函式內部假如修改它,則修改的是物件複製後的副本,不會影響原物件。要修改某個待確定的物件,需要傳遞指向它的指標。 scanf 系列中使用 & 就是為了這麼做。
值得注意的 scanf 系列用對應 %s 系列的轉換指定時,若要寫入字元陣列 str ,則實參應該用 str 而非 &str 。因為此類指定對應指首向字元的指標(字元陣列會隱式轉換過去),而非指向整個字元陣列的指標。
詳細可以參考這些:
scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_sprintf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s