[英]Why does sscanf need & for %d integers but not for %s strings
我對sscanf例程中的參數感到困惑
#include <string.h>
char sentence[20];
char first_name[7];
char last_name[7];
int age;
strcpy(sentence, "aaaaaa bbbbbb 20");
sscanf(sentence, "%s %s %d", first_name, last_name, &age);
為什么char數組不需要&帶前綴但整數變量呢?
謝謝
C中的字符串是一個字符序列,后跟一個'\\ 0'字符。 C語言中的數組名稱是初始元素的地址。 因此,對於單個整數,您將需要添加'&'來傳遞要存儲int的地址。
在C語言中,數組的名稱表示基地址。
在sscanf()
您需要傳遞可以存儲變量值的存儲位置。 因此, &
address of
,用於原始類型的情況下獲取地址。 這就是為什么&
與int
數據類型一起使用的原因。 但是string是字符數組(后跟'\\0'
),name提供了基地址。
&
在所調用的函數中隱含地址 。
sscanf
期望變量的地址,以便它可以將從給定字符串中讀取的值存儲到這些地址中(並因此存儲在這些變量中)。
C語言中的數組名稱本身是指第一個數組元素的地址,但是對於變量,則需要指定變量的地址。
在C語言中,字符數組的標識符作為指向數組第一個元素的指針而衰減。
sscanf()
函數需要一個指向內存位置的指針才能在其中寫入數據,如果您傳遞的是int
類型,則應在變量名前加上&
,這樣才能有效地傳遞變量的地址。 這樣,sscanf可以直接在變量的內存位置上寫入。 您是通過引用而不是副本傳遞參數。
由於數組名稱被衰減為指向數組第一個元素的指針,因此您無需在其前面加上&
前綴,因為sscanf
已經訪問了內存位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.