我对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数组不需要&amp;前缀但整数变量呢?
谢谢
答案 0 :(得分:3)
C中的字符串是一系列字符,后跟一个&#39; \ 0&#39;字符。 C中数组的名称是初始元素的地址。因此,对于单个整数,您需要添加&#39;&amp;&#39;传递要存储int的地址。
答案 1 :(得分:0)
在C中,数组的名称代表基址
在sscanf()
中,您需要传递可以存储变量值的内存位置。所以&
表示address of
,用于在原始类型的情况下获取地址。这就是&
与int
数据类型一起使用的原因。但是字符串是字符的数组(后跟'\0'
),name提供了基址。
答案 2 :(得分:0)
&
意味着 的地址。
sscanf
期望变量的地址,以便它可以将给定字符串的读取值存储到这些地址中(因此也存储在那些变量中)。
C中的数组名称本身是指第一个数组元素的地址,但对于变量,您需要指定变量的地址。
答案 3 :(得分:-1)
在C中,字符数组的标识符被衰减为指向数组第一个元素的指针。
sscanf()
函数需要一个指向要写入其中的内存位置的指针,如果你传递int
类型,你应该在变量名前加&
,这样才能通过变量的地址。这样,sscanf可以直接写入变量的内存位置。您是通过引用传递参数,而不是通过复制。
由于数组名称被衰减为指向数组第一个元素的指针,因此&
已经访问了内存位置,因此不需要在其前面添加sscanf
。