首页>Program>source

为什么我们需要放一个 & scanf()中的运算符 用于将值存储在整数数组中,而不是将字符串存储在char数组中时?

int a[5];
for(i=0;i<5;i++)
scanf("%d",&a[i]);

但是

char s[5]; scanf("%s",s);

由于数组是指向第一个元素的指针,因此我们需要传递存储值的地址.因此,对于int / float数组,它基本上意味着 (a+i)

但是字符串情况如何?

最新回答
  • 2021-1-11
    1 #

    scanf接受一个指向您要输入值的指针。在第一种情况下,您正在传递对位置in中特定int的引用.整数数组.在第二个实例中,您将整个数组传递给scanf.在C语言中,数组指针是同义词,可以互换使用(某种).变量s实际上是指向内存的指针,该内存具有5个字符的连续空间。

  • 2021-1-11
    2 #

    在表达式中使用数组名称时(作为 sizeof的操作数除外) 或操作员 &的地址 ),它将计算该数组中第一项的地址-即指针值.那意味着没有 & 需要获得地址。

    在表达式中再次使用int(或short,long,char,float,double等)时(再次,作为 sizeof的操作数除外) 或 & ),它计算得出该对象的值.要获取地址(即指针值),您需要使用 & 取地址。

  • 2021-1-11
    3 #

    scanf("%d", a + i ) 也可以。

    %d%s 告诉 scanf 会发生什么,但在两种情况下都期望有一个地址

    在C语言中,数组和指针是相关的。

    %sscanf说 期望一个字符串是 \0 终止,是否适合字符数组 scanf 不在乎.

  • 2021-1-11
    4 #

      All the variables used to recieve values through scanf() 必须通过他们的地址传递.这意味着所有参数都必须指向用作参数的变量。

      scanf("%d", &count);

      将字符串读取到字符数组中,而没有任何索引的数组名称是数组的第一个元素的地址。因此,我们使用

      将字符串读取到字符数组地址中

      scanf("%s",address);

      在这种情况下,地址已经是一个指针,不需要在&运算符之前。

      p

      因为字符数组已经是指针。

      您可以将C数组视为指向堆栈分配的RAM量的指针.您甚至可以对它们使用指针操作,而不是使用数组索引. *aa[0] 两者都产生相同的结果(返回数组中的第一个字符)。

  • vbscript:如何在ASP Classic中使用cURL发布数据?
  • python:为什么strcount('')和len(str)给出不同的输出?