C 何时使用&何时读取输入

C 何时使用&何时读取输入,c,scanf,C,Scanf,我对scanf很困惑。 何时使用&何时从键盘读取数据。 据我所知,&总是在您希望程序读入某些内容时使用 Eg. scanf("%c",&varA) or scanf("%d",&varA) 我也明白,当您使用指针时,您不会使用&for scanf 如果我想把一些东西扫描到数组中呢?我是否使用&? 我知道数组的名称计算为数组的第一个元素的地址,这也类似于指针 如果我想把一些东西扫描到数组中呢 这取决于您感兴趣的阵列 如果是字符数组,则可以使用scanf%s,s;不带&运算符,s

我对scanf很困惑。 何时使用&何时从键盘读取数据。 据我所知,&总是在您希望程序读入某些内容时使用

Eg. scanf("%c",&varA) or  scanf("%d",&varA)
我也明白,当您使用指针时,您不会使用&for scanf

如果我想把一些东西扫描到数组中呢?我是否使用&? 我知道数组的名称计算为数组的第一个元素的地址,这也类似于指针

如果我想把一些东西扫描到数组中呢

这取决于您感兴趣的阵列

如果是字符数组,则可以使用scanf%s,s;不带&运算符,s是字符数组。 如果是数值数组,则需要扫描%d,&a[i];对于单个数组元素,因此需要使用&运算符。 如果我想把一些东西扫描到数组中呢

这取决于您感兴趣的阵列

如果是字符数组,则可以使用scanf%s,s;不带&运算符,s是字符数组。 如果是数值数组,则需要扫描%d,&a[i];对于单个数组元素,因此需要使用&运算符。 在第一个参数之后传递给scanf的参数都是地址。您需要提供变量的地址来分配输入值

这就是为什么在读取变量值时,必须使用&运算符传递其地址

比如说,

int n;
scanf("%d", &n);
您还可以将变量的地址分配给指针,并使用该指针:

int n;
int *p = &n;
scanf("%d", p);
对于数组,数组的名称实际上是基址,即第一个元素的地址。您也可以在scanf中使用:

这种方法对于读取输入中没有空格的字符串非常有用:

char str[64];
scanf("%s", str);
在第一个参数之后传递给scanf的参数都是地址。您需要提供变量的地址来分配输入值

这就是为什么在读取变量值时,必须使用&运算符传递其地址

比如说,

int n;
scanf("%d", &n);
您还可以将变量的地址分配给指针,并使用该指针:

int n;
int *p = &n;
scanf("%d", p);
对于数组,数组的名称实际上是基址,即第一个元素的地址。您也可以在scanf中使用:

这种方法对于读取输入中没有空格的字符串非常有用:

char str[64];
scanf("%s", str);
scanf使用,因此要读取特定变量,需要查看哪个变量会给出该变量的地址

1对于正常变量int a,需要(&S),scanf%d,&a

2对于指针变量int*a,不需要&scanf%d,a

3对于数组int a[10]

仅使用名称时,不需要&scanf%s,a; 当用于元素时,&是必需的,scanf%d,&a[0]; scanf使用,因此要读取特定变量,需要查看哪个变量会给出该变量的地址

1对于正常变量int a,需要(&S),scanf%d,&a

2对于指针变量int*a,不需要&scanf%d,a

3对于数组int a[10]

仅使用名称时,不需要&scanf%s,a; 当用于元素时,&是必需的,scanf%d,&a[0];
您只需要提供一个指针作为存储结果的参数。如果使用非指针变量,则使用&获取其地址。另一方面,如果指针已经作为指针从其他地方传递到函数中,那么您可以直接使用它,而无需&。如果要存储到a[i],可以使用&a[i]或a+i来获得相同的结果。只需提供一个指针作为存储结果的参数。如果使用非指针变量,则使用&获取其地址。另一方面,如果指针已经作为指针从其他地方传递到函数中,那么您可以直接使用它,而无需&。如果要存储到a[i],可以使用&a[i]或a+i来获得相同的结果。